python: сравнение значений в списке, если существует в другом списке - PullRequest
1 голос
/ 10 ноября 2019

Итак, теперь у меня есть 2 списка,

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], ..... , [10, ['pizza', 'food10']]]

Я хочу сравнить все 2-й элемент в списке 1 и, если он существует в списке 2, распечатать соответствующий список. поэтому результат, который я хочу получить, выглядит примерно так:

[[1, 'miniwok'],[2, 'chicken'],[10,'pizza']]

Я пытался использовать вложенный цикл, но я думаю, что я делаю что-то не так

for x in range(len(list1)):
    for y in range(1, len(list2)+1):
        if(list1[x][1] == list2[y]):
            result = [y, list2[y][0]]
            fstore.append(result)

Ответы [ 3 ]

2 голосов
/ 10 ноября 2019

Вы можете преобразовать list2 в словарь для более быстрого поиска:

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], [10, ['pizza', 'food10']]]
new_l2 = dict(list2)
result = [[b, k[a]] for a, b in list1 if (k := new_l2.get(b)) is not None]

Вывод:

[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]
1 голос
/ 10 ноября 2019

В вашем коде возникли проблемы с доступом к значениям с помощью индексирования, и вы не назначили fstore как пустой список перед его использованием.

Исправленная версия вашего ответа приведена здесь -

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']], [10, ['pizza', 'food10']]]
fstore = []
for x in range(len(list1)):
    for y in range(len(list2)):
        if(list1[x][1] == list2[y][0]):
            result = [list2[y][0], list2[y][1][0] ]
            fstore.append(result)
            break

Содержание fstore:

[[1, 'miniwok'], [2, 'chicken'], [10, 'pizza']]

Надеюсь, это может вам помочь. Если у вас есть какие-либо сомнения, вы можете спросить в комментариях. :)

0 голосов
/ 10 ноября 2019

Вы можете сделать:

list1 = [[0,1],[0,2],[0,10]]
list2 = [[1, ['miniwok', 'food1']], [2,['chicken', 'food2']], [3,['duck', 'food3']],... , [10, ['pizza', 'food10']]]
numbers = [number[1] for number in list1]
[(item[0], item[1][0]) for item in list2 if item[0] in numbers]

Вывод:

[(1, 'miniwok'), (2, 'chicken'), (10, 'pizza')]

Конечно, "()" в понимании списка, который создает список кортежейможно переключить с помощью «[]», чтобы создать список списков, если вы предпочитаете.

...