微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用遍历列表的循环来过滤另一个列表

如何解决使用遍历列表的循环来过滤另一个列表

鉴于以下 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?