2024-04-25 20:18:57 发布
网友
我需要比较两个列表,以便创建一个列表中的特定元素的新列表,而不是另一个列表中的特定元素。例如:
main_list=[] list_1=["a", "b", "c", "d", "e"] list_2=["a", "f", "c", "m"]
我想循环遍历list_1并将list_2中所有在list_1中找不到的元素追加到main_list。
结果应该是:
main_list=["f", "m"]
我怎么用python呢?
(1)可以使用NumPy的^{}(array1,array2,assume_unique=False)。
array1
array2
assume_unique
False
这将在array1中产生在array2中不是的唯一值。assume_unique默认为False(如果您知道array1和array2都是唯一的,则将其设置为True)。
True
对于那些希望对答案进行排序的人:(1.1)将assume_unique设置为False将自动发出排序数组。(1.2)将assume_unique设置为True将生成(可能)未排序数组。
为了解决这个问题,我制作了一个自定义函数:
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
如果您关心的是唯一的元素(基于response of Chinny84),那么:
list_1 = ["a", "b", "c", "d", "e"] list_2 = ["a", "f", "c", "m"] main_list = setdiff_sorted(list_2,list_1)
(2)否则,使用main_list = setdiff_sorted(list_2,list_1, assume_unique=True)
main_list = setdiff_sorted(list_2,list_1, assume_unique=True)
两个答案都会给你["f", "m"]。
["f", "m"]
边注: (a) 自定义函数setdiff_sorted返回一个列表(与NumPy的setdiff1d中的数组相比)。 (b) 如果这两个列表中的任何一个是而不是唯一的,情况就会不同。说list_2 = ["a", "f", "c", "m", "m"]。答案(1)产生["f", "m"],但答案(2)给出["f", "m", "m"](因为list_2中每个元素的唯一性无关紧要)。不过,这两个答案都是排序的。
setdiff_sorted
setdiff1d
list_2 = ["a", "f", "c", "m", "m"]
["f", "m", "m"]
list_2
pythonnumpy
当您有可用的本机方法时,不确定上述解释为何如此复杂:
main_list = list(set(list_2)-set(list_1))
可以使用集合:
main_list = list(set(list_2) - set(list_1))
输出:
>>> list_1=["a", "b", "c", "d", "e"] >>> list_2=["a", "f", "c", "m"] >>> set(list_2) - set(list_1) set(['m', 'f']) >>> list(set(list_2) - set(list_1)) ['m', 'f']
根据@JonClements的评论,这里有一个更整洁的版本:
>>> list_1=["a", "b", "c", "d", "e"] >>> list_2=["a", "f", "c", "m"] >>> list(set(list_2).difference(list_1)) ['m', 'f']
(1)可以使用NumPy的^{} (
array1
,array2
,assume_unique
=False
)。这将在
array1
中产生在array2
中不是的唯一值。assume_unique
默认为False
(如果您知道array1
和array2
都是唯一的,则将其设置为True
)。对于那些希望对答案进行排序的人:
(1.1)将
assume_unique
设置为False
将自动发出排序数组。(1.2)将
assume_unique
设置为True
将生成(可能)未排序数组。为了解决这个问题,我制作了一个自定义函数:
如果您关心的是唯一的元素(基于response of Chinny84),那么:
(2)否则,使用
main_list = setdiff_sorted(list_2,list_1, assume_unique=True)
两个答案都会给你
["f", "m"]
。边注:
(a) 自定义函数
setdiff_sorted
返回一个列表(与NumPy的setdiff1d
中的数组相比)。(b) 如果这两个列表中的任何一个是而不是唯一的,情况就会不同。
说
list_2 = ["a", "f", "c", "m", "m"]
。答案(1)产生
["f", "m"]
,但答案(2)给出["f", "m", "m"]
(因为list_2
中每个元素的唯一性无关紧要)。不过,这两个答案都是排序的。pythonnumpy
当您有可用的本机方法时,不确定上述解释为何如此复杂:
可以使用集合:
输出:
根据@JonClements的评论,这里有一个更整洁的版本:
相关问题 更多 >
编程相关推荐