Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何通过理解检查元素是否已经在列表中?_Python 3.x_For Comprehension - Fatal编程技术网

Python 3.x 如何通过理解检查元素是否已经在列表中?

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])

当我在理解中执行某个元素时,如何检查该元素是否已经在列表中

例如,在下面的理解中,我想限制重复的数字,尽管我根本不寻找唯一的数字,但我想通过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])
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中,您可以在创建列表时访问列表理解(使用依赖于实现的魔术),但这样做不是一个好主意;最好使用集合(如果顺序不重要)或简单循环(如果顺序重要)。