Python поиск по спискам списков - PullRequest
48 голосов
/ 21 июля 2009

У меня есть список из двух предметов, и мне нужно найти что-то в нем.

Если список:

list =[ ['a','b'], ['a','c'], ['b','d'] ]

Я могу легко найти пару, выполнив

['a','b'] in list

Теперь, есть ли способ узнать, есть ли у меня пара, в которой строка присутствует только во второй позиции? Я могу сделать это:

for i in range (0, len(list)):
    if list[i][1]==search:
       found=1

Но есть ли (лучший) способ без цикла for? Мне не нужно знать i или продолжать цикл после того, как он найден.

Ответы [ 13 ]

1 голос
/ 21 июля 2009
>>> the_list =[ ['a','b'], ['a','c'], ['b','d'] ]
>>> "b" in zip(*the_list)[1]
True

zip() объединяет несколько списков и группирует элементы по индексу, эффективно транспонируя матрицу списков списков. Звездочка берет содержимое the_list и отправляет его на zip в качестве аргументов, так что вы фактически передаете три списка по отдельности, чего и хочет zip. Осталось только проверить, есть ли "b" (или что-то еще) в списке, составленном из элементов с интересующим вас индексом.

0 голосов
/ 26 мая 2015

Я думаю, что использование вложенных списков - самый элегантный способ решить эту проблему, потому что промежуточным результатом является позиция, в которой находится элемент. Реализация будет:

list =[ ['a','b'], ['a','c'], ['b','d'] ]
search = 'c'
any([ (list.index(x),x.index(y)) for x in list for y in x if y == search ] )
0 голосов
/ 26 мая 2013

Ниже приведен простой способ точно определить, где в списке находится элемент.

for i in range (0,len(a)):
sublist=a[i]
for i in range(0,len(sublist)):
    if search==sublist[i]:
        print "found in sublist "+ "a"+str(i)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...