如何解决使用遍历列表的循环来过滤另一个列表
鉴于以下 2 个列表:
list_1 = [[1,2,'ABC'],[2,3,'ABC']]
list_2 = ['ABC 1.csv','ABC 2.csv','ABC 3.csv','ABC 4.csv','ABC 5.csv']
可以写出什么代码:
所需的输出:
list_3 = ['ABC 1.csv','ABC 3.csv']
我的尝试:
count = 0
while count < len(list_1):
list_3 = [i for i in list_2 if str(list_1[int(count)][0]) in i or str(list_1[int(count)][1]) in i and list_1[int(count)][2] in i]
count += 1
解决方法
你可以试试这样的:
list_1=[[1,2,'ABC'],[2,3,'ABC']]
list_2=['ABC 1.csv','ABC 2.csv','ABC 3.csv','ABC 4.csv','ABC 5.csv']
numbers = []
for l in list_1:
if l[0] not in numbers:
numbers.append(l[0])
if l[1] not in numbers:
numbers.append(l[1])
list_3 = []
for l in list_2:
if int(l[4]) in numbers:
list_3.append(l)
print(list_3)
,
首先从 wanted
创建一个 list_1
列表,其中包含所有允许的条目。然后获取您在 list_2
列表中找到的 wanted
中的每个条目。
list_1 = [[1,'ABC']]
list_2 = ['ABC 1.csv','ABC 5.csv']
wanted = []
for n1,n2,prefix in list_1:
wanted.append(f'{prefix} {n1}.csv')
wanted.append(f'{prefix} {n2}.csv')
result = [entry for entry in list_2 if entry in wanted]
print(result)
您可能在 wanted
列表中有重复项,但这并不重要。
更灵活的单行(请注意 list_1
第一个条目中的数字):
list_1 = [[1,5,'ABC 5.csv']
print([entry for entry in list_2 if entry in {f'{prefix} {n}.csv' for *numbers,prefix in list_1 for n in numbers}])
这会给你['ABC 1.csv','ABC 5.csv']
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。