-2

给定以下 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 2.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
4

2 回答 2

0

你可以尝试这样的事情:

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)
于 2021-07-01T18:20:30.903 回答
0

首先创建一个包含所有允许条目的wanted列表。list_1然后从list_2您在wanted列表中找到的每个条目中取出。

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

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, 2, 5, 'ABC'], [2, 3, 'ABC']]
list_2 = ['ABC 1.csv', 'ABC 2.csv', 'ABC 3.csv', 'ABC 4.csv', '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 2.csv', 'ABC 3.csv', 'ABC 5.csv']

于 2021-07-01T18:25:30.300 回答