引用列表理解中的当前列表

时间:2018-04-06 23:13:27

标签: python python-3.x

*如果标题没有意义,请道歉。

我正在尝试创建一个新列表,其中包含列表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”

2 个答案:

答案 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)

解决此问题的最佳方法是使用setsintersection方法。

>>> 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])
编辑:克里斯打败了我:)