嵌套列表理解理解以比较python中的字符串

问题描述

我有两个列表

l1 = ["filea","fileb","filec"]
l2 = ["a","b"]

我想生成一个包含l1元素的结果列表l3,其中l1元素包含l2元素。所以最后我想拥有

l3 = ["filea","fileb"]

我只是不知道如何使用列表推导... 我尝试过:

l3 = [x for x in l1 for y in l2 if y in x]

它有效...

我只想了解这里实际发生的情况以及发生的顺序。对于任何帮助,我将非常感谢!

解决方法

可以这样写:

l3 = []
for x in l1:
    for y in l2:
        if y in x:
            l3.append(x)
,

您可以简单地循环所有列表,并检查l2元素中是否有l1中的元素

示例

l1 = ["filea","fileb","filec"]
l2 = ["a","b"]

l3 = list({x for x in l1 for y in l2 if x[-1] in l2})
# Or
l3 = [x for x in l1 for y in l2 if y in x]
print(l3)

列表理解明细

您刚刚遍历了l1l2,因为在python中,您可以像在列表上一样对字符串进行索引,还可以检查整个字符串中是否出现一个字符,所以您也可以这样做if y in x,您检查字符y是否出现在字符串x

l3 = []
for x in l1:
    for y in l2:
        if y in x:
            l3.append(x)

输出

['filea','fileb']
,

撰写时:

l3 = [x for x in l1 for y in l2 if y in x]

等于以下内容:

l3 = []
for x in l1:  # loop through each element in the list l1
    for y in l2:  # loop through each element in the list l2
        if y in x: # if x contains y
            l3.append(x)
,

你可以做

{$tweet->id}

一种更有效的解决方案是使用正则表达式:

l3 = [s for s in l1 if any(c in s for c in l2)]