Проверьте, находится ли часть многомерного списка в отдельном многомерном списке - PullRequest
0 голосов
/ 21 апреля 2020

Вот пример кода.

list1 = [['one','a'],['two','a'],['three','a'],['four','a']]
list2 = [['three','b'],['four','a'],['five','b']]

for l in list1:
    if l not in list2:
        print(l[0])

и вывод этого кода.

one
two
three

, потому что ['four', 'a'] действительно появляется в обоих списках.

То, что я пытаюсь сделать, это проверить, появляется ли только первый элемент каждой записи в первом списке во втором списке, я попробовал варианты следующего

list1 = [['one','a'],['two','a'],['three','a'],['four','a']]
list2 = [['three','b'],['four','a'],['five','b']]

for l in list1:
    if l[0] not in list2:
        print(l[0])

однако этот код возвращает

one
two
three
four

, хотя во втором списке появляются «три» и «четыре».

Ранее я использовал разные методы, чтобы найти Значения, которые появляются только в одном из пары списков, затем использовали его для создания основного списка, который содержит все возможные значения без дубликатов, и я считаю, что то же самое должно быть возможно при использовании этого метода, но синтаксис для меня загадка. Куда я здесь иду не так?

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

вы можете использовать set operations

list1 = [['one','a'],['two','a'],['three','a'],['four','a']]
list2 = [['three','b'],['four','a'],['five','b']]

result = set(i[0] for i in list1) - set(i[0] for i in list2)

print(result)

# output {'one', 'two'}
1 голос
/ 21 апреля 2020

Вы можете использовать not any(), а затем проверить определенные c требования в понимании:

list1 = [['one','a'],['two','a'],['three','a'],['four','a']]
list2 = [['three','b'],['four','a'],['five','b']]

for l in list1:
    if not any(l[0] == l2[0] for l2 in list2):
        print(l[0])

# one
# two

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

list1 = [['one','a'],['two','a'],['three','a'],['four','a']]
list2 = [['three','b'],['four','a'],['five','b']]

set(l[0] for l in list1) - set(l2[0] for l2 in list2)
# {'one', 'two'}
...