通过在python中搜索子字符串来创建列表

时间:2014-12-02 17:25:36

标签: python python-2.6

我有两个清单:

names = ['albert', 'bob', 'charlie']
padded_names = ['albertGARBAGE', 'jamesTRASH', 'bobREFUSE', 'timRUBBISH', 'charlieWASTE']

我想要一个成员为['albertGARBABE', 'bobREFUSE', 'charlieWASTE']

的列表

查看其他主题,我看到使用filter()函数完成了类似的任务,但我不知道如何将其应用于列表。我也可以迭代第一个列表并使用str.find(),但我也没有运气。

实际上,padded_names是一个列表列表,但我可以操纵它。

效率不是我的关注,所以丑陋的解决方案是有效的:)不幸的是,我正在研究的系统仅限于python 2.6。

3 个答案:

答案 0 :(得分:0)

你可以很简单地做到:

filtered_list = []
for name in names:
    for padded_name in padded_names:
        if padded_name.find(name) >= 0:
            filtered_list.append(padded_name)

并且可以转换成一个漂亮的python一个班轮:

filtered_list = [padded_name for padded_name in padded_names if any(padded_name.find(name) >= 0 for name in names)]

如果你想使用过滤器功能,你需要设计自己的方法,在你的条件下返回true:

def test(padded_name):
    names = ['albert', 'bob', 'charlie']
    return any(padded_name.find(name) >= 0 for name in names)        

filtered_names = filter(test,padded_names)

答案 1 :(得分:0)

过滤器版本如下所示:

filter( lambda x : any( name in x for name in names ), padded_names )

Filter有两个参数,一个函数(1st arg),你正在应用于(可迭代的)数据集(第二组)。

这使用lambda创建一个自定义函数,用于检查名称是否出现在padded_names中的每个名称中。

答案 2 :(得分:0)

使用list comprehensionstartswith:一个班轮

>>> [ x for x in padded_names for y in names if x.startswith(y) ]
['albertGARBAGE', 'bobREFUSE', 'charlieWASTE']