Python 3.x 如何通过理解检查元素是否已经在列表中?
当我在理解中执行某个元素时,如何检查该元素是否已经在列表中 例如,在下面的理解中,我想限制重复的数字,尽管我根本不寻找唯一的数字,但我想通过if条件来防止Python 3.x 如何通过理解检查元素是否已经在列表中?,python-3.x,for-comprehension,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] 在创建理解时,您无法访问它(据我所知,如果我错了,请有人纠正我!),但在您的情况下,您可以使用集,这样可以消除重复 uniques = set([1, 2, 3, 1, 2, 3])
[x for x in [1,2,3,1,2,3]]
我在找像这样的东西
[x for x in [1,2,3,1,2,3] if not in self]
在创建理解时,您无法访问它(据我所知,如果我错了,请有人纠正我!),但在您的情况下,您可以使用
集
,这样可以消除重复
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]
如果在创建过程中确实需要直接访问列表,则需要使用显式循环而不是理解
x = [1,2,3,1,2,3]
y = [x[n] for n in range(len(x)) if x.index(x[n]) == n]
?
我认为在这一点上,简单地使用for循环而不是理解来编写它可能更具可读性。我认为您需要的是and。它可以做你想做的事情,没有任何奇怪的语法
x = [1,2,3,1,2,3]
y = [x[n] for n in range(len(x)) if x.index(x[n]) == n]
ans = list({x for x in [1,2,3,1,2,3])})
实际上,这也可以简化为
ans = list(set([1,2,3,1,2,3]))
但我认为第一个可能在性能上更好。实际上,这只是一个简单的示例来演示!我并不是在我遇到的真正问题中寻找唯一性:(至少在某些版本的CPython中,您可以在创建列表时访问列表理解(使用依赖于实现的魔术),但这样做不是一个好主意;最好使用集合(如果顺序不重要)或简单循环(如果顺序重要)。