2012-03-11 53 views
3

我是Python新手,我試圖檢查一對[a,b]是否存在於列表l=[[a,b],[c,d],[d,e]]中。我搜索了很多問題,但找不到確切的解決方案。請有人能告訴我這樣做的正確和最短的方式嗎?如何檢查一個元組是否存在於Python列表中?

當我運行:

a=[['1','2'],['1','3']] 
for i in range(3): 
    for j in range(3): 
     if [i,j] in a: 
      print a 

輸出爲空白

如何實現這一目標呢?

+0

您的代碼工作對我來說,輸出爲'[[1,2],[1,3]]'預期。 – bereal 2012-03-11 11:44:24

+3

啊,編輯代碼後很明顯,'[1,2]'!='['1','2']'。 – bereal 2012-03-11 11:45:32

+0

對不起,我想這個,我沒寫好 – sum2000 2012-03-11 11:47:18

回答

3

的代碼不起作用,因爲'1' != 1,因此,['1','2'] != [1,2] 如果你想要的工作,請嘗試:

a=[['1','2'],['1','3']] 
for i in range(3): 
    for j in range(3): 
     if [str(i), str(j)] in a: # Note str 
      print a 

(但使用in或設置已經提到越好)

11

下面是一個例子:

>>> [3, 4] in [[2, 1], [3, 4]] 
True 

如果你需要這樣做了很多次考慮使用set不過,因爲它有一個更快的遏制檢查。

+0

我在範圍(3)中使用嵌套循環:'和'在範圍內(3)''然後嘗試'[i,j]在....但它不能識別 – sum2000 2012-03-11 11:36:48

+1

@ sum2000:發佈完整的代碼。 – orlp 2012-03-11 11:39:57

0

在我的翻譯(IPython的0.10,巨蟒2.7.2+)你的代碼提供了正確的輸出:(這應該是一個評論,但我不能離開他們還)

In [4]: a=[[1,2],[1,3]] 

In [5]: for i in range(3): 
    ...:   for j in range(3): 
    ...:    if [i,j] in a: 
    ...:     print a 
    ...: 
[[1, 2], [1, 3]] 

編輯:

原來你曾在a列表字符串。 然後,你需要你的int秒值進行轉換,以str還有:

a=[['1','2'],['1','3']] 
for i in range(3): 
    for j in range(3): 
     if [str(i), str(j)] in a: 
      print a 
+0

對不起,我編輯了代碼...現在嘗試 – sum2000 2012-03-11 11:49:02

0

此代碼工作正常,我:

>>> a = [[1, 2], [3, 4], [13, 11]] 
>>> 
>>> for i in range(10): 
...   for j in range(10): 
...     if [i, j] in a: 
...       print [i, j] 
... 
[1, 2] 
[3, 4] 
>>> 

我不知道什麼是你的代碼錯誤。確定你在第一行中缺少']'。

+0

我編輯了代碼 – sum2000 2012-03-11 11:50:02

0

不要忘記[python]中的[a,b]不是[b,a],所以如果你想考慮[A,B]和[B,A]是你想要的元組中的2個值相同:

如果列表很大並且有冗餘,您可能還想使用set(your_list)。

在您的代碼示例中,您compaing整數和字符串:

['1', '2'] # this is a 2-list of strings '1' and '2' 
[1, 2] # this is a 2-list of integers 1 and 2 
相關問題