2012-03-11 102 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 
相关问题