2013-09-22 4 views
1

Я пытаюсь перебрать список списков в python 2.7.5 и вернуть те, где первое значение найдено во втором списке, примерно так:Найти совпадающие значения в списке списков с помощью python

#python 2.7.5 
list1 = ['aa', 'ab', 'bb', 'bc', 'cc'] 
list2 = [['aa', 1, 3, 7],['de', 2, 2, 1],['bc', 3, 4, 4]] 

list3 = [] 
for x in list1: 
    for y in list2: 
     if x == y: 
      list3.append(y) 

Поэтому я бы хотел, чтобы list3 содержал [['aa',1,3,7],['bc', 3, 4, 4]], но вместо этого я просто получил весь список2.

+1

А? Это не даст вам весь список «list2», это даст вам пустой список. Проверьте код еще раз. –

+1

Существует ли конкретная причина, по которой вторая структура должна быть списком списков вместо, скажем, одного dict? – geoffspear

+1

В этом случае я думаю, что было бы полезно сообщить нам, чего вы хотите достичь с помощью вашей программы/скрипта (а не только представленного фрагмента кода). Потому что на первый взгляд я бы предположил, что существуют лучшие структуры данных для решения вашей проблемы (например, dicts). – cyphorious

ответ

5

Попробуйте более простой подход, который ближе к тому, что вы хотите:

for e in list2: 
    if e[0] in list1: 
     list3.append(e) 

Вам нужно e[0] так list2 список списков. Вы также можете написать в одной строке с помощью filter() function:

list3 = filter(lambda e: e[0] in list1, list2) 

или с помощью list comprehension:

list3 = [e for e in list2 if e[0] in list1] 
1

В коде есть только ошибка. Вам нужно x == y [0] вместо x == y. Последний сравнивает строку со списком.

Вы также можете использовать списковых

>>> [x for x in list2 if x[0] in list1] 
[['aa', 1, 3, 7],['bc', 3, 4, 4]] 
1

Похоже, ваш вопрос, потому что вы пытаетесь сравнить список элементов со списком списка элементов.

Если вы шагаете через петлю for, вы увидите, что на вашей первой итерации вы сравниваете 'aa' против ['aa', 1, 3, 7], который, вероятно, не то, что вы хотели бы сделать.

Если вы только сравнивая первый элемент, вам нужно будет изменить for петлю на:

for x in list1: 
    for y in list2: 
     if x == y[0]: 
      list3.append(y) 
Смежные вопросы