繁体   English   中英

如何用另一个项目列表过滤元组列表

[英]How to filter a list of tuples with another list of items

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

我的参考编号列表如下所示:

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'),
]

我怎样才能做到这一点?

您可以将内置过滤器function 与lambda一起使用:

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

这会将 list2 变成一个可迭代的,如果你需要它是一个列表,而不仅仅是一个迭代器,你可以使用一个列表推导来代替:

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

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)

output

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM