我正在尝试使用列表推导解决此问题。我要列出清单:
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]
使用列表推导时是否可以排除重复的值?
答案 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”。