2013-07-23 48 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])) 

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

相關問題