Python列表推导:从列表a创建列表b,不包括重复项

时间:2018-09-16 21:38:29

标签: python list-comprehension

我正在尝试使用列表推导解决此问题。我要列出清单:

a = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

并创建一个新列表b,其中包含a中所有低于5的数字,不包括重复

我可以使用for循环来做到这一点:

b = list()
for i in a:
    if i < 5 and i not in b:
        b.append(i)

这给了我[1, 2, 3],但是当我尝试使用列表理解时:

b = list()
b = [i for i in a if i not in b and i < 5]

我得到一个包含重复值的列表:[1, 1, 2, 3]

使用列表推导时是否可以排除重复的值?

2 个答案:

答案 0 :(得分:2)

使用set,您可以得到没有重复的列表。

>>> set(a)
{1, 2, 3, 34, 5, 8, 13, 21, 55, 89}

因此,您可以使用(几乎)与set(a)而不是a相同的列表理解:

b = [i for i in set(a) if i<5]
#[1, 2, 3]

请注意,无需先使用b实例化列表b = list()

答案 1 :(得分:0)

发生这种情况是因为在python创建临时列表时“ b”仍然为空。仅在列表理解创建列表后才分配“ b”。