Найти совпадающие значения в списке списков с помощью python

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

#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.

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

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

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

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

или используя понимание списка :

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

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

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

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

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

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

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

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