当前位置:   article > 正文

初学python不会做题?看这一篇就够了_python 对比两个list中元素是否相同(忽略顺序)

python 对比两个list中元素是否相同(忽略顺序)

 

目录

 

(一) 比较两组整数

代码引入

1.代码解释

1.这段Python代码实现了一个函数find_common_elements,该函数用于找出两个列表中的共同元素。

2.解释为社么要把列表转化为集合

3. intersection方法解释(求集合交集的函数)

补充求并集和差集

 4.判断语句解释(判断变量是否为空)

5.输入与分割

2.代码的更改

 1.更改解释

2.对引入内容的解释

1.sort排序

2.利用key参数制定规则

常见的key参数

list1.index(x)的解释

3.sort函数的其他(正向排序,逆向排序)

利用key参数进行逆序排序

3.对代码的再次更改

map函数

1. 应用单个参数函数

2. 应用多个参数函数

3. 应用内置函数

4. 用于多个可迭代对象

join函数


 


 

(一) 比较两组整数

【问题描述】
比较两组整数是否有相同的元素,不考虑元素的顺序,并忽略元素重复的情况。例如:
1  4  9  16  9  7  4  9  11
与下列一组整数:
11  7  9  16  4  1
相同。
【输入形式】
分行输入两组整数,以空格分割
【输出形式】
打印两组整数中相同的元素,顺序以第一行的整数输出顺序为准,如果没有相同元素,打印“No Answer”
【输入样例】
1 4  9  16  9  7  4  9  11
11  7  9  16  4  1
【输出样例】

"#"代表空格
1#4#9#16#7#11#
【样例说明】
输入两组整数
1  4  9  16  9  7  4  9  11
11  7  9  16  4  1
由于这两个数组具有相同的元素,顺序打印第一行与第二行相同的元素

代码引入

  1. def find_common_elements(list1, list2):
  2. set1 = set(list1)
  3. set2 = set(list2)
  4. common_elements = list(set1.intersection(set2))
  5. if common_elements:
  6. return common_elements
  7. else:
  8. return "No Answer"
  9. input1 = input("请输入第一组整数:").split()
  10. input2 = input("请输入第二组整数:").split()
  11. result = find_common_elements(input1, input2)
  12. print(result)

1.代码解释

1.这段Python代码实现了一个函数find_common_elements,该函数用于找出两个列表中的共同元素。

find_common_elements(list1, list2):

 程序获取用户输入的两组整数,然后调用find_common_elements函数找出共同元素,并打印结果。

(list1, list2)

表示调用的两组整数

  1. set1 = set(list1) # 将list1转换为集合set1
  2. set2 = set(list2) # 将list2转换为集合set2

2.解释为社么要把列表转化为集合

将列表转换为集合有几个好处和特点:

  1. 去重:集合是由不重复元素组成的,因此将列表转换为集合可以自动去除重复的元素,这对于找出共同元素是非常有用的。

  2. 集合操作:集合支持并集、交集、差集等操作,这些操作在处理数据时非常方便。例如,通过集合的intersection方法可以轻松地找出两个列表中的共同元素。

  3. 效率:在进行一些集合操作时,集合比列表具有更好的性能,特别是在处理大量数据时。

另外,列表和集合有一些基本的特点:

列表:

  • 有序:列表中的元素是有序排列的,可以通过索引访问元素。
  • 可变:列表中的元素可以修改、添加和删除。
  • 可重复:列表中的元素可以重复出现。

集合:

  • 无序:集合中的元素没有顺序,不支持通过索引访问元素。
  • 不重复:集合中的元素是唯一的,不会重复出现。
  • 不可变性:集合本身是可变的,但集合中的元素必须是不可变的(比如数字、字符串、元组等)。

3. intersection方法解释(求集合交集的函数)

当你在Python中使用集合时,可以使用intersection方法来找到两个集合的交集。具体来说,如果你有两个集合set1set2,你可以通过set1.intersection(set2)来获取它们的交集。

举个例子,假设我们有两个集合分别是{1, 2, 3, 4}{3, 4, 5, 6},你可以使用intersection方法来找到它们的交集:

  1. set1 = {1, 2, 3, 4}
  2. set2 = {3, 4, 5, 6}
  3. intersection_set = set1.intersection(set2)
  4. print(intersection_set) # 输出:{3, 4}

在这个例子中,intersection_set将包含set1set2的共同元素,即{3, 4}

所以,intersection方法实际上返回了两个集合的交集,即包含两个集合共同元素的新集合。

补充求并集和差集

当处理集合时,常用的几种集合操作包括求并集、差集和交集。Python中的集合类型提供了相应的方法来进行这些操作。

  1. 并集(Union):在Python中,可以使用union()方法来求两个集合的并集。例如,如果有两个集合a和b,可以通过a.union(b)或者使用操作符"|"来求取它们的并集。并集包含了两个集合中的所有元素,但不会重复包含相同的元素。
  2. 差集(Difference):Python中的集合类型提供了difference()方法来求两个集合的差集。差集指的是属于第一个集合但不属于第二个集合的元素构成的集合。可以使用a.difference(b)或者操作符"-"来求取差集。
  1. a = {1, 2, 3}
  2. b = {3, 4, 5}
  3. union_set = a.union(b)
  4. # 或者
  5. union_set = a | b
  6. print(union_set) # 输出结果为{1, 2, 3, 4, 5}
  1. a = {1, 2, 3, 4, 5}
  2. b = {3, 4}
  3. difference_set = a.difference(b)
  4. # 或者
  5. difference_set = a - b
  6. print(difference_set) # 输出结果为{1, 2, 5}

 4.判断语句解释(判断变量是否为空)

  1. if common_elements: # 如果common_elements不为空
  2. return common_elements # 返回common_elements,即两组整数中的共同元素
  3. else:
  4. return "No Answer" # 如果common_elements为空,返回"No Answer"

if common_elements 的含义就是判断集合common_elements是否为空,如果不为空(即包含至少一个元素),条件判断结果为True,执行相应的代码块;如果为空,则条件判断结果为False,对应的代码块则不会被执行。

它的含义是在判断common_elements变量是否为空。在Python中,对于大多数数据类型(包括列表、集合、字典等),空的意义是没有元素或者元素个数为0。

对于集合(Set)来说,如果它是一个空集合,那么在条件判断中会被视为“假”;如果它包含至少一个元素,那么在条件判断中会被视为“真”。因此,if common_elements: 的含义就是判断集合common_elements是否为空,如果不为空(即包含至少一个元素),条件判断结果为True,执行相应的代码块;如果为空,则条件判断结果为False,对应的代码块则不会被执行。

下面是一个示例:

  1. common_elements = {1, 2, 3}
  2. if common_elements:
  3. print("common_elements集合不为空")
  4. else:
  5. print("common_elements集合为空")

在这个示例中,由于common_elements集合包含了元素,所以条件判断结果为True,会执行print("common_elements集合不为空")这行代码。

5.输入与分割

  1. input("请输入第一组整数:"):这部分代码使用input()函数显示提示信息"请输入第一组整数:",并等待输入。输入的内容会被作为字符串返回。

  2. .split():这是对用户输入的字符串进行分割的操作。默认情况下,如果没有传入任何参数,split()方法会根据空格来分割字符串,并返回一个包含各个分割部分的列表。

  3. input1 = input("请输入第一组整数:").split():这行代码将用户输入的第一组整数转换为列表,并赋值给变量input1

  4. input("请输入第二组整数:"):同样的方式获取用户输入的第二组整数。

  5. input2 = input("请输入第二组整数:").split():将用户输入的第二组整数转换为列表,并赋值给变量input2

2.代码的更改

  1. def find_common_elements(list1, list2):
  2. set1 = set(list1)
  3. set2 = set(list2)
  4. common_elements = set1.intersection(set2)
  5. if common_elements:
  6. return sorted(common_elements, key=lambda x: list1.index(x))
  7. else:
  8. return "No Answer"
  9. input1 = input("请输入第一组整数,以空格分隔:").split()
  10. input2 = input("请输入第二组整数,以空格分隔:").split()
  11. result = find_common_elements(input1, input2)
  12. print(result)

 1.更改解释

这两段代码在实现功能上是相同的,都是找到两个列表中的共同元素并按照第一个列表中的顺序进行排序。然而,它们在输出形式上有一些差别。

第二段代码中,在发现共同元素后,直接返回了连接后的字符串,例如'1 2'。而在第二段代码中,在发现共同元素后,使用sorted()函数对共同元素进行排序,并且通过key参数指定了排序的规则,即根据第一个列表中元素的顺序进行排序。然后将排好序的共同元素作为列表进行返回,例如['1', '2']

而在第一段代码中,发现共同元素后,直接将其作为列表返回,没有进行排序操作。

因此,第二段代码返回的是经过排序的共同元素列表,而第一段代码返回的是未经排序的共同元素列表。这导致了两段代码在输出形式上的差异。

在功能上,两段代码都能够找到两个列表中的共同元素并返回,只是在处理共同元素时有所不同。

2.对引入内容的解释

这段代码中的 `sorted` 函数用于对共同元素列表进行排序。其中,`common_elements` 是共同元素的列表,`key` 参数指定了排序的规则,使用 `lambda x: list1.index(x)` 作为排序的关键字函数。

`lambda x: list1.index(x)` 这部分代码定义了一个匿名函数,它以列表中的每个元素 `x` 作为输入,并返回 `list1.index(x)`,即元素 `x` 在 `list1` 中的索引位置。这意味着排序时会根据元素在 `list1` 中的顺序进行排序。

换句话说,这段代码的作用是对共同元素列表进行排序,排序的依据是这些元素在 `list1` 中出现的顺序。这样可以保留共同元素在 `list1` 中的顺序,从而实现按照 `list1` 的顺序对共同元素进行排序。

1.sort排序

当使用 sort() 方法对列表进行排序时,它会直接修改原始列表而不返回新的列表。例如,如果有一个列表 my_list = [3, 1, 2],调用 my_list.sort() 后,my_list 将变成 [1, 2, 3],原始顺序被改变了。

如果不指定 key 参数,sort() 方法会按照默认的排序规则对列表进行排序。对于数字类型的元素,它会按照从小到大的顺序进行排序;对于字符串类型的元素,它会按照字母表顺序进行排序(即按照字符的Unicode编码顺序)。

例如,对于数字列表 [3, 1, 2],使用 sort() 方法后会得到 [1, 2, 3];对于字符串列表 ['banana', 'apple', 'cherry'],使用 sort() 方法会得到 ['apple', 'banana', 'cherry']

 

2.利用key参数制定规则

另外,sort() 方法也可以接受一个关键字参数 key,通过指定这个参数,你可以定义一个函数来生成排序的关键值。这样可以实现根据特定标准对列表进行排序,例如根据元素的某个属性值进行排序。

需要注意的是,sort() 方法是就地排序,不会返回新的列表,因此在调用该方法后,原始列表的顺序会被改变。

常见的key参数

在 Python 中,`sort()` 方法的 `key` 参数可以接受各种不同类型的函数,用于定义元素比较的关键字。以下是一些常见的 `key` 参数的用法示例:

1. **按照长度排序:**
   ```
   my_list.sort(key=len)
   ```
   这会按照元素的长度来对列表进行排序。

2. **按照字符串小写形式排序:**
   ```
   my_list.sort(key=str.lower)
   ```
   这会按照字符串的小写形式对列表进行排序。

3. **按照元组的第二个元素排序:**
   ```
   my_list.sort(key=lambda x: x[1])
   ```
   这会按照元组中第二个元素的值来对列表进行排序。

4. **按照自定义函数排序:**
   ```
   def custom_key_func(item):
       return item.get('age')
   my_list.sort(key=custom_key_func)
   ```
   这会按照元素中字典的 'age' 键对列表进行排序。

这些只是一些常见的示例,实际上你可以使用任何能够接受单个参数并返回一个可用于比较的值的函数作为 `key` 参数。这样可以非常灵活地定制排序规则,以满足实际需求。

list1.index(x)的解释

`list1.index(x)` 是Python列表中的一个方法调用,它的作用是返回元素 `x` 在列表 `list1` 中第一次出现的索引位置。换句话说,它可以用来找到列表中特定元素的位置。

举个例子,假设有一个列表 `list1 = [3, 1, 4, 1, 5, 9, 2, 6, 5]`,如果调用 `list1.index(5)`,那么它会返回 `4`,因为数字 `5` 第一次出现在列表中的索引位置是 `4`。

在给定的代码中,`key=lambda x: list1.index(x)` 被用作 `sorted()` 函数的关键字参数,这意味着排序将根据元素在 `list1` 中第一次出现的位置来进行。

3.sort函数的其他(正向排序,逆向排序)

当你使用 `sort()` 方法对列表进行排序时,可以通过指定 `reverse=True` 参数来实现逆序排序。这意味着列表中的元素将按照相反的顺序进行排列。

例如,如果有一个列表 `my_list = [3, 1, 2]`,在调用 `my_list.sort(reverse=True)` 后,`my_list` 将会变成 `[3, 2, 1]`,即按照逆序排列。

相反地,如果使用 `my_list.sort(reverse=False)` 或者 `my_list.sort()`,则默认情况下列表将按照正序排列,即最小的元素排在最前面,最大的元素排在最后面。

因此,通过指定 `reverse=True` 参数,你可以很方便地对列表进行逆序排序,而不必自己编写逆序排序的逻辑。

利用key参数进行逆序排序

  1. my_list = [3, 1, 2]
  2. my_list.sort(key=lambda x: -x)
  3. print(my_list) # 输出 [3, 2, 1]

3.对代码的再次更改

  1. def find_common_elements(list1, list2):
  2. set1 = set(list1)
  3. set2 = set(list2)
  4. common_elements = set1.intersection(set2)
  5. if common_elements:
  6. sorted_elements = sorted(common_elements, key=lambda x: list1.index(x))
  7. return ' '.join(map(str, sorted_elements))
  8. else:
  9. return "No Answer"
  10. input1 = input().split()
  11. input2 = input().split()
  12. result = find_common_elements(input1, input2)
  13. print(result)

代码的核心逻辑是一致的,都是找出两个列表中的共同元素,并按照其中一个列表的顺序进行排序。只是'二'代码返回的是字符串,而第‘三’代码返回的是列表。

`join(map(str, sorted_elements))` 这段代码是将排序后的元素列表 `sorted_elements` 中的每个元素转换为字符串,然后使用空格把它们连接起来形成一个字符串。


- `map(str, sorted_elements)` 这部分使用了 `map` 函数,它将 `str` 函数应用到 `sorted_elements` 列表中的每个元素上,把每个元素转换为字符串。
- `join` 方法是针对字符串的方法,它将字符串列表中的所有元素连接在一起,中间用指定的分隔符(这里是空格)分隔开来。在这里,我们将使用空格作为分隔符。

因此,整个表达式 `join(map(str, sorted_elements))` 的含义就是将 `sorted_elements` 中的元素转换为字符串,并用空格连接起来形成一个新的字符串。

map函数

map 函数是 Python 中的一个内置函数,它可以将一个函数应用到一个可迭代对象(比如列表)的所有元素上,返回一个包含所有结果的迭代器。

map 函数的一般语法是:

map(function, iterable, ...)
  • function:要对每个可迭代元素执行的函数。
  • iterable:一个或多个可迭代对象,可以是列表、元组等。

map 函数会返回一个迭代器,你可以使用 list 函数将其转换为列表,或者直接在循环中使用它。

下面是 map 函数的几种常见用法:

1. 应用单个参数函数

  1. # 将列表中的每个元素平方
  2. numbers = [1, 2, 3, 4, 5]
  3. squared = list(map(lambda x: x**2, numbers))
  4. # 输出:[1, 4, 9, 16, 25]

2. 应用多个参数函数

  1. # 将两个列表对应位置的元素相加
  2. list1 = [1, 2, 3]
  3. list2 = [4, 5, 6]
  4. added = list(map(lambda x, y: x + y, list1, list2))
  5. # 输出:[5, 7, 9]

3. 应用内置函数

  1. # 将字符串列表中的每个字符串转换为大写
  2. words = ['hello', 'world']
  3. upper_words = list(map(str.upper, words))
  4. # 输出:['HELLO', 'WORLD']

4. 用于多个可迭代对象

  1. # 将两个列表中的元素依次相乘
  2. list1 = [1, 2, 3]
  3. tuple1 = (4, 5, 6)
  4. multiplied = list(map(lambda x, y: x * y, list1, tuple1))
  5. # 输出:[4, 10, 18]

总之,map 函数提供了一种简洁而强大的方法,可以对可迭代对象中的元素进行批量处理,无需显式编写循环。

join函数

join 函数是字符串对象的一个方法,它可以用于将序列中的元素连接成一个字符串。一般来说,我们会在一个字符串分隔符上调用 join 方法,然后将一个列表或其他可迭代对象作为参数传入,join 方法会使用指定的分隔符将可迭代对象中的元素连接起来。

下面是 join 方法的基本语法:

separator.join(iterable)
  • separator:用于分隔元素的字符串。
  • iterable:要连接的可迭代对象,通常是列表。

下面是一个示例,演示了 join 方法的使用:

  1. my_list = ["apple", "banana", "cherry"]
  2. result = ", ".join(my_list)
  3. print(result)
  4. # 输出: "apple, banana, cherry"

在这个示例中,我们首先定义了一个包含三个元素的列表 my_list,然后使用 ", " 作为分隔符,调用 join 方法将列表中的元素连接成一个字符串。最后,打印结果字符串,得到了 "apple, banana, cherry"

需要注意的是,join 方法是一个字符串对象的方法,所以它只能被字符串调用。这意味着你需要在字符串上调用 join 方法,将可迭代对象作为参数传入。

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/902995
推荐阅读
相关标签
  

闽ICP备14008679号