首页 > 解决方案 > 检查子字符串匹配并创建新列表

问题描述

这个问题感觉很基本,我必须忽略一些明显的东西。Stack 上有很多与此相关的帖子,但我没有找到完全涵盖这个用例的帖子。

我有两个列表 - 一个带有 URL,一个带有子字符串:

list1 = ['https://', 'http://', 'woof://', 'meow://']
list2 = ['https://google.com', 'stackoverflow.com', 'meow://test.net', 'yahoo.com']

我想创建第三个列表,其中所有值list1都从 list2 中删除。

例如 -list3 = ['google.com', 'stackoverflow.com', 'test.net', 'yahoo.com']

我努力了:

for x in list1:
    for y in list2:
        if x in y:
            list3.append(y.replace(x, '')
        else:
            list3.append(y)

这会创建一个包含大量重复项的列表。我可能可以添加逻辑来清理list3,但我觉得好像必须有一个更 Pythonic 的方式来做到这一点。

我觉得这篇文章与我正在寻找的内容很接近,但并不完全在那里。

标签: pythonpython-3.xlistfor-loop

解决方案


您可以使用以下理解functools.reduce

from functools import reduce
[reduce(lambda x, y: x.strip(y), list1, e) for e in list2]
['google.com', 'stackoverflow.com', 'test.net', 'yahoo.com']

推荐阅读