*如果标题没有意义,请道歉。
我正在尝试创建一个新列表,其中包含列表a
中的列表b
中的元素(没有重复项)。
我当前的代码有效,但它包含重复项。我想要做什么(见下文)抛出错误信息。我知道它为什么不起作用,但有没有办法绕过这个,同时将代码保持在一行?
a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
# What I have currently
list2 = [num for num in a if num in b]
print(list2)
[1,1,2,3,5,8,13]
# What I am trying to do
list2 = [num for num in a if num in b and num not in list2]
print(list2)
NameError:未定义名称“list2”
答案 0 :(得分:3)
你应该在这里使用set
,因为:
设置对象支持数学运算,如并集,交集,差异和对称差异
In [38]: a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
...: b = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
...:
In [39]: set(a) & set(b)
Out[39]: {1, 2, 3, 5, 8, 13}
答案 1 :(得分:1)
解决此问题的最佳方法是使用sets
和intersection
方法。
>>> a = set([1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89])
>>> b = set([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13])
>>> a.intersection(b)
set([1, 2, 3, 5, 8, 13])
编辑:克里斯打败了我:)