Некоторая проблема сравнения двух многомерных списков - PullRequest
0 голосов
/ 12 февраля 2019

Спасибо, что увидели мою проблему.Я разработал, чтобы создать a_list и стереть каждый элемент в b_list, если он есть в b_list.Но это не работает должным образом.Это работает только за исключением a_list [0].Что происходит в моем коде?

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for i in b_list:
    for j in a_list:
        temp = [k for k in i if k != j]
    print(temp)

>>> 0, [0, 1], '3', [0, 4]]
    ['1', [0, 1], [0, 3], '4', [0, 5]]

В этом результате я не могу понять, почему там [0, 1] s !!! ???

Я хочу такой результат

>>> [0, '3', [0, 4]]
>>> ['1', [0, 3], '4', [0, 5]]

PLZ, помогите мне.

Ответы [ 3 ]

0 голосов
/ 12 февраля 2019

Вы были близки.Вы можете использовать not in для элементов b_list, чтобы проверить их существование в a_list.

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for i in b_list:
    temp = [j for j in i if j not in a_list]
    print(temp)

# [0, '3', [0, 4]]
# ['1', [0, 3], '4', [0, 5]]
0 голосов
/ 12 февраля 2019

Настоящая проблема в том, что ваш код перезаписывает temp каждый раз, когда вы повторяете элемент в a_list, поэтому, когда a_list = [[0, 1], [0, 2]], ваш temp будет содержать только результат фильтрации [0, 2].Вот модификация вашего кода:

a_list = [[0, 1], [0, 2]]
b_list = [[0, [0, 1], [0, 2], '3', [0, 4]], ['1', [0,1], [0, 2], [0, 3], '4', [0, 5]]]

for sub_list in b_list:
    temp = []
    for item_b in sub_list:
        not_in_a = True
        for item_a in a_list:
            not_in_a &= item_b != item_a
        if not_in_a:
            temp.append(item_b)
    print(temp)

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

0 голосов
/ 12 февраля 2019

Вы можете использовать понимание вложенного списка следующим образом:

[[i for i in l if i not in a_list] for l in b_list]

Возвращает:

[[0, '3', [0, 4]], ['1', [0, 3], '4', [0, 5]]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...