Как отфильтровать список кортежей с другим списком элементов - PullRequest
0 голосов
/ 09 июля 2020

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

Мой список ссылочных номеров выглядит следующим образом:

list1 = ['0101', '0202', '0303']

И мой список кортежей вроде этого:

list2 = [
('8578', 'aaa', 'bbb', 'ccc'),
('0101', 'ddd', 'eee', 'fff'),
('9743', 'ggg', 'hhh', 'iii'),
('2943', 'jjj', 'kkk', 'lll'),
('0202', 'mmm', 'nnn', 'ooo'),
('7293', 'ppp', 'qqq', 'rrr'),
('0303', 'sss', 'ttt', 'uuu'),
]

Я хочу отфильтровать второй список выше в зависимости от наличия ссылочных номеров из первого списка внутри кортежей: если ссылка число входит в кортеж, скрипт убирает его из списка.

Вот ожидаемый результат:

newlist2 = [
('8578', 'aaa', 'bbb', 'ccc'),
('9743', 'ggg', 'hhh', 'iii'),
('2943', 'jjj', 'kkk', 'lll'),
('7293', 'ppp', 'qqq', 'rrr'),
]

Как это сделать?

Ответы [ 2 ]

1 голос
/ 09 июля 2020
list1 = ['0101', '0202', '0303']
list2 = [
('8578', 'aaa', 'bbb', 'ccc'),
('0101', 'ddd', 'eee', 'fff'),
('9743', 'ggg', 'hhh', 'iii'),
('2943', 'jjj', 'kkk', 'lll'),
('0202', 'mmm', 'nnn', 'ooo'),
('7293', 'ppp', 'qqq', 'rrr'),
('0303', 'sss', 'ttt', 'uuu'),
]

filtered = []
for i in list2:
    if i[0] not in list1:
        filtered.append(i)


print(filtered)

вывод

[('8578', 'aaa', 'bbb', 'ccc'),
 ('9743', 'ggg', 'hhh', 'iii'),
 ('2943', 'jjj', 'kkk', 'lll'), 
('7293', 'ppp', 'qqq', 'rrr')]
1 голос
/ 09 июля 2020

Вы можете использовать встроенную функцию filter с лямбда :

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

Это превратит list2 в повторяемый , если вам нужно, чтобы это был список, а не просто итератор, вы можете вместо этого использовать понимание списка :

list2 = [element for element in list2 if element[0] not in list1]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...