繁体   English   中英

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

[英]Nested list comprehension understanding for comparing strings in python

我有两个清单

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

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

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)

你可以做

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

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

import re
pattern = re.compile('|'.join(map(re.escape, l2)))
l3 = list(filter(pattern.search, l1))   # Equivalent to [s for s in l1 if pattern.search(s)]

暂无
暂无

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

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