Сравнивая два списка списков, чтобы найти общие значения Python - PullRequest
0 голосов
/ 09 июля 2019

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

List_1
[[42, 43, 45, 48, 155, 157], [37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188].....
List_2
[[37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188], [41, 44, 526, 602, 379, 188]....

Мне нужно сравнить первую скобку вList_1 [42, 43, 45, 48, 155, 157] С первой скобкой в ​​List_2 [37, 330, 43, 47, 157] желаемый результат - числа, которые одинаковы в каждой последовательной скобке ... для первой скобки результат равен 43 и 157

, затем мне нужно продолжить вторую скобкув List_1, со второй скобкой в ​​List_2 и т. д.

  • Количество значений в каждой скобке может варьироваться
  • Мне нужно, чтобы каждая скобка в 1 списке сравнивалась с соответствующей скобкой из другойlist
  • Мне не нужно, чтобы результаты были отдельными

Я на самом базовом уровне, но я пробовал несколько разных вещей, включая использование пересечения множеств, списокМатчи.Я уверен, что есть простой способ, но только начинающий.

    set_x = set([i[1] for i in list_1])
    print(set_x)
    set_y = set([i[0] for i in list_2])
    matches = set_x.intersection(set_y)
    print(matches)

Это ответ, который далек от {3, 8, 396, 12,}, и я не могу понять, что он делает.

тоже пробовал это

    common_elements=[]
    import itertools 
    for i in list(itertools.product(coords_list_1,coords_list_2)):
        if i[0] == i[1]:
            common_elements.append(i[0])
            print(common_elements)

, но это дает массу результатов.

Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Ваш подход затрагивает элементы в неправильной «оси».Например:

set_x = set([i[1] for i in list_1])

создает набор из 2-го элемента каждого списка.

В этих случаях вы должны забыть об индексах.

вы просто хотитев zip объединяет списки, чтобы выполнить пересечение между ними

List_1 = [[42, 43, 45, 48, 155, 157], [37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188]]
List_2 = [[37, 330, 43, 47, 157], [258, 419, 39, 40, 330, 47], [419, 39, 44, 589, 599, 188], [41, 44, 526, 602, 379, 188]]

result = [set(x) & set(y) for x,y in zip(List_1,List_2)]

результат:

>>> result
[{43, 157}, {330, 47}, {419, 39}, {188, 44}]
1 голос
/ 09 июля 2019

Используйте zip и установите intersection:

for x, y in zip(List_1, List_2):
    print(set(x).intersection(y))

# {43, 157}
# {330, 47}
# {419, 39}
# {188, 44}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...