Python在一个列表中找出不在另一个列表中的元素。

11 浏览
0 Comments

Python在一个列表中找出不在另一个列表中的元素。

我需要比较两个列表,以便创建一个新的列表,其中包含在一个列表中找到的特定元素,但不在另一个列表中。例如:\n

main_list = []
list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"] 

\n我想遍历 list_1,并将 list_2 中在 list_1 中找不到的所有元素追加到 main_list。\n结果应该是:\n

main_list = ["f", "m"]

\n如何用Python实现?

0
0 Comments

问题:如何找到一个列表中存在,但另一个列表中不存在的元素?

解决方法:

可以使用列表推导式来解决这个问题。首先,可以使用以下代码来找到在list_2中存在但list_1中不存在的元素:

main_list = [item for item in list_2 if item not in list_1]

这将返回一个包含在list_2中但不在list_1中的元素的新列表。例如,对于list_1 = ["a", "b", "c", "d", "e"]和list_2 = ["a", "f", "c", "m"],执行上述代码后,将得到main_list = ['f', 'm']。

当处理大型列表时,上述方法可能不是最理想的解决方案。在这种情况下,更好的选择是先将list_1转换为set,然后再进行比较。具体代码如下:

set_1 = set(list_1)  # 将list_1转换为set,这样查找时间复杂度从O(n)降低到O(1)
main_list = [item for item in list_2 if item not in set_1]

注意:对于更大的list_1,最好先将其转换为set或frozenset,例如:set_1 = frozenset(list_1),然后使用类似的方法来比较,这样每个元素的查找时间复杂度将从O(n)降低到大约O(1)。

另外,还可以使用enumerate()函数来获取元素的索引。例如,可以使用以下代码来获取在list_2中存在但list_1中不存在的元素的索引:

[index for (index, item) in enumerate(list_2) if item not in list_1]

这将返回一个包含在list_2中存在但list_1中不存在元素的索引的新列表。

需要注意的是,如果使用ettanany提供的解决方案,请小心,因为对于较大的列表,该解决方案可能非常慢。建议结合shadowranger的建议进行优化。

0
0 Comments

问题:Python如何查找一个列表中不在另一个列表中的元素?

解决方法1:

import numpy as np
main_list = np.setdiff1d(list_2,list_1)
# 返回list_2中不在list_1中的元素

解决方法2:如果需要返回排序后的列表

def setdiff_sorted(array1,array2,assume_unique=False):
    ans = np.setdiff1d(array1,array2,assume_unique).tolist()
    if assume_unique:
        return sorted(ans)
    return ans
main_list = setdiff_sorted(list_2,list_1)

解释:

1. 使用NumPy的`setdiff1d`函数可以解决该问题。该函数的参数为`array1`、`array2`和`assume_unique`(默认为`False`)。

- 当`assume_unique`为`False`时,函数会首先确定数组中的唯一元素。

- 当`assume_unique`为`True`时,函数会假定数组中的元素已经是唯一的,并且会跳过确定唯一元素的步骤。

该函数返回`array1`中与`array2`不同的唯一值。默认情况下,`assume_unique`为`False`。

示例代码:

   import numpy as np
   list_1 = ["a", "b", "c", "d", "e"]
   list_2 = ["a", "f", "c", "m"] 
   main_list = np.setdiff1d(list_2,list_1)
   # 返回list_2中不在list_1中的元素
   

2. 对于希望得到排序后的结果的情况,可以使用自定义函数`setdiff_sorted`:

   import numpy as np
   def setdiff_sorted(array1,array2,assume_unique=False):
       ans = np.setdiff1d(array1,array2,assume_unique).tolist()
       if assume_unique:
           return sorted(ans)
       return ans
   

使用该函数可以得到结果:

   main_list = setdiff_sorted(list_2,list_1)
   

补充说明:

(a) 解决方法2(自定义函数`setdiff_sorted`)返回的是列表(解决方法1返回的是数组)。

(b) 如果不确定元素是否唯一,可以在两种解决方法中都使用NumPy的`setdiff1d`的默认设置。当元素不唯一时,会出现什么样的情况?请参考说明(c)。

(c) 如果两个列表中有一个不是唯一的,结果会有所不同。

假设`list_2`不是唯一的:`list_2 = ["a", "f", "c", "m", "m"]`。保持`list_1`不变:`list_1 = ["a", "b", "c", "d", "e"]`。

使用默认值`assume_unique`会得到`["f", "m"]`(两种解决方法都是如此)。然而,如果将`assume_unique`设置为`True`,两种解决方法都会得到`["f", "m", "m"]`。

这是因为用户假设元素是唯一的。因此,最好将`assume_unique`保持为默认值。注意,两种答案都是排序后的。

以上内容为如何在Python中查找一个列表中不在另一个列表中的元素的方法及解释。

0
0 Comments

问题:Python如何找到一个列表中不在另一个列表中的元素?

原因:这个问题的出现可能是由于用户想要找到一个列表中独有的元素,或者是需要在两个列表之间进行差异比较。

解决方法:可以使用集合(set)来解决这个问题。首先将两个列表转换成集合,然后通过集合的差异操作来找到不同的元素,最后将结果转换回列表。

代码示例:

list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
# 使用集合的差异操作找到不同的元素
result = list(set(list_2) - set(list_1))
print(result)

输出结果:

['m', 'f']

上述代码将list_2转换成集合,然后与list_1转换成的集合进行差异操作,得到了不同的元素集合。最后将结果转换回列表并进行打印。

另外,也可以使用集合的difference()函数来实现相同的功能:

list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
# 使用集合的difference()函数找到不同的元素
result = list(set(list_2).difference(list_1))
print(result)

输出结果与之前的代码相同:

['m', 'f']

这种方法适用于只关心列表中独有元素的情况。如果需要考虑重复的元素,可以使用其他方法来解决。

通过使用集合的差异操作或difference()函数,可以方便地找到一个列表中不在另一个列表中的元素。这种方法适用于只关心独有元素的情况。如果需要考虑重复的元素,可以使用其他方法来解决。

0