你如何通过理解检查元素是否已经在列表中?

时间:2013-07-23 15:09:21

标签: python-3.x for-comprehension

当我在理解中这样做时,如何检查元素是否已经在列表中?

例如,在下面的理解中说我想限制重复的数字虽然我根本不寻找唯一的数字,但我希望通过if条件来阻止。

[x for x in [1,2,3,1,2,3]]

我正在寻找像

这样的东西
[x for x in [1,2,3,1,2,3] if not in self]

3 个答案:

答案 0 :(得分:1)

我认为您要找的是set comprehensionconversion to list。它会做你想要的,没有任何奇怪的语法。

ans = list({x for x in [1,2,3,1,2,3])})

也可以简化为

ans = list(set([1,2,3,1,2,3]))

但我认为第一个可能性能更好。

答案 1 :(得分:0)

你在创建它时无法获得理解(据我所知,如果我错了,请有人纠正我!),但在你的情况下你可以使用set,这消除了重复。

uniques = set([1, 2, 3, 1, 2, 3])
print(uniques) # >>> set([1, 2, 3])

如果你的列表理解需要更复杂,你可以从集合中索引理解,而不是原始列表。

mylist = [1, 2, 3, 1, 2, 3]
print([x*x for x in set(mylist)]) # >>> [1, 4, 9]

如果您确实需要在创建过程中直接访问列表,则需要使用显式循环而不是理解。

答案 2 :(得分:0)

x = [1,2,3,1,2,3]
y = [x[n] for n in range(len(x)) if x.index(x[n]) == n]

我认为在这一点上,简单地使用for-loop而不是理解来编写它可能更具可读性。