2013-07-23 30 views
0

当我在理解时,如何检查元素是否已经在列表中?如何通过理解来检查元素是否已经在列表中?

例如说在下面的理解我想限制重复数字尽管我根本不寻找唯一的数字,我想通过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] 

回答

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] 

如果你真的需要在创建过程中的列表的直接访问,你需要使用一个显式循环,而不是理解。

+0

其实它只是一个简单的例子来演示!我并没有在真正的问题中寻找唯一性,我有:( – sadaf2605

+0

至少在CPython的某些版本中,您可以在创建它时使用列表理解(使用与实现有关的魔术),但这样做并不是一个好主意;更好地使用一套(如果订单不重要)或简单的循环(如果订单很重要)。 –

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而不是理解来编写它可能更具可读性。

1

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

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

Actaully可以也可以简化为

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

,但我第一个想到的可能是更好的性能。

相关问题