如何使用其他项目列表过滤元组列表

时间:2020-07-08 23:42:13

标签: python list tuples

我有两个列表:一个列表包含引用号的项目,第二个列表包含元组,其中一些元组包含第一个列表的参考号。

我的参考编号列表如下:

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 个答案:

答案 0 :(得分:1)

您可以将内置filter函数与lambda一起使用:

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

这会将list2变成可迭代的,如果您需要它成为列表,而不仅仅是迭代器,则可以使用list comprehension来代替:

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

答案 1 :(得分:1)

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')]
相关问题