Как проверить, существует ли кортеж в списке Python? - PullRequest
4 голосов
/ 11 марта 2012

Я новичок в Python и пытаюсь проверить, существует ли пара [a,b] в списке l=[[a,b],[c,d],[d,e]]. Я искал много вопросов, но не мог найти точное решение. Может кто-нибудь сказать мне правильный и кратчайший способ сделать это?

когда я бегу:

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

ВЫХОД ПУСТОЙ

как этого добиться тогда?

Ответы [ 5 ]

16 голосов
/ 11 марта 2012

Вот пример:

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

Если вам нужно делать это много раз, рассмотрите возможность использования set, потому что он имеет гораздо более быструю проверку локализации.

4 голосов
/ 11 марта 2012

Код не работает, потому что '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 или наборы, как уже упоминалось))

0 голосов
/ 11 марта 2012

Не забывайте, что [a, b] не является [b, a] в python, поэтому вы можете захотеть упорядочить 2 значения в ваших кортежах, если вы хотите рассмотреть [A, B] и [B, A]тоже самое:

Возможно, вы также захотите использовать set (your_list), если у вас большой список с избыточностью.

В вашем примере кода вы сочетаете целые числа и строки:

['1', '2'] # this is a 2-list of strings '1' and '2'
[1, 2] # this is a 2-list of integers 1 and 2
0 голосов
/ 11 марта 2012

Этот код отлично работает для меня:

>>> 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 голосов
/ 11 марта 2012

В моем интерпретаторе (IPython 0.10, Python 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 s в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...