3

我想将一个列表中的值与第二个列表中的值进行比较,并返回第一个列表中但不在第二个列表中的所有值,即

list1 = ['one','two','three','four','five']
list2 = ['one','two','four']

将返回“三”和“五”。

我对python只有一点经验,所以这可能是一种尝试解决它的荒谬和愚蠢的方法,但这是我到目前为止所做的:

def unusedCategories(self):
    unused = []
    for category in self.catList:
        if category != used in self.usedList:
            unused.append(category)
    return unused

但是,这会引发错误“对非序列的迭代”,我认为这意味着一个或两个“列表”实际上并不是列表(两者的原始输出与我的第一个示例格式相同)

4

5 回答 5

8

set(list1).difference(set(list2))

于 2010-02-11T12:48:17.090 回答
6

使用集合来获取列表之间的差异:

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])
于 2010-02-11T12:48:07.960 回答
1

set.difference

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}

您可以跳过list2设置的转换。

于 2010-02-11T12:52:55.867 回答
0

您可以使用集合或列表推导来做到这一点:

unused = [i for i in list1 if i not in list2]
于 2010-02-11T12:49:59.400 回答
0

这里的所有答案都是正确的。如果列表很短,我会使用列表理解;套装会更有效率。在探索您的代码为什么不起作用时,我没有收到错误消息。(它不起作用,但这是一个不同的问题)。

>>> list1 = ['a','b','c']
>>> list2 = ['a','b','d']
>>> [c for c in list1 if not c in list2]
['c']
>>> set(list1).difference(set(list2))
set(['c'])
>>> L = list()
>>> for c in list1:
...     if c != L in list2:
...         L.append(c)
... 
>>> L
[]

问题是该if声明毫无意义。希望这可以帮助。

于 2010-02-11T13:01:28.870 回答