如果从子字符串列表中删除列表中的字符串

时间:2015-02-22 10:56:23

标签: python string list numpy substring

我想知道什么是最诡异的方式:

拥有字符串列表和子字符串列表会删除包含任何子字符串列表的字符串列表的元素。

list_dirs = ('C:\\foo\\bar\\hello.txt', 'C:\\bar\\foo\\.world.txt', 'C:\\foo\\bar\\yellow.txt')

unwanted_files = ('hello.txt', 'yellow.txt)

期望的输出:

list_dirs = (C:\\bar\\foo\.world.txt')

我已尝试实施类似this之类的问题,但我仍在努力进行删除并将该特定实现扩展到列表中。

到目前为止,我已经这样做了:

for i in arange(0, len(list_dirs)):
    if 'hello.txt' in list_dirs[i]:
        list_dirs.remove(list_dirs[i])

这可行,但可能它不是更清洁的方式,更重要的是它不支持列表,如果我想删除hello.txt或yellow.txt我将不得不使用或。感谢。

2 个答案:

答案 0 :(得分:2)

使用list comprehensions

>>> [l for l in list_dirs if l.split('\\')[-1] not in unwanted_files]
['C:\\bar\\foo\\.world.txt']

使用split获取文件名

>>> [l.split('\\')[-1] for l in list_dirs]
['hello.txt', '.world.txt', 'yellow.txt']

答案 1 :(得分:1)

你也可以使用lambda的过滤函数

print filter(lambda x: x.split('\\')[-1] not in unwanted_files, list_dirs)
#['C:\\bar\\foo\\.world.txt']

或者如果你不介意导入os(imo这个更干净,然后分割字符串)

print filter(lambda x: os.path.basename(x) not in unwanted_files, list_dirs)

在列表理解中,它看起来像这样

[l for l in list_dirs if os.path.basename(l) not in unwanted_files]