首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何查看字符串是否包含列表中的所有子字符串?[Python]

如何查看字符串是否包含列表中的所有子字符串?[Python]
EN

Stack Overflow用户
提问于 2016-08-17 16:58:32
回答 5查看 4.1K关注 0票数 4

下面是一个场景:

我有一长串的时间戳文件名,在时间戳前后都有字符。

就像这样:prefix_20160817_suffix

我想要的是一个列表(最终将是原始列表的子集),其中包含带有特定前缀、后缀和部分时间戳的文件名。这些特定字符串已经在列表中给出了。注意:这个“包含”列表可能大小不同.

例如:['prefix1', '2016', 'suffix']['201608', 'suffix']

我如何容易地获得一个文件名列表,其中包含--“”数组中的每个元素?

下面是一些伪代码来演示我想要的:

代码语言:javascript
运行
复制
for each fileName in the master list:
    if the fileName contains EVERY element in the "contains" array:
        add fileName to filtered list of filenames
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-08-17 17:03:46

我会把列表编译成一个模式

代码语言:javascript
运行
复制
import fnmatch

pattern = '*'.join(contains)
filetered_filenames = fnmatch.filter(master_list, pattern)

这基本上是将contains中的所有字符串连接到一个glob模式中,在两者之间使用*通配符。这假设contains的顺序是重要的。考虑到您正在寻找前缀、后缀和(部分)日期之间,这并不是一个很大的延伸。

需要注意的是,如果您在具有不区分大小写的文件系统的操作系统上运行此操作,那么fnmatch匹配也是不区分大小写的。这通常就是你在这种情况下想要的。

票数 5
EN

Stack Overflow用户

发布于 2016-08-17 17:06:24

你在寻找类似的东西(使用列表理解和all() )

代码语言:javascript
运行
复制
>>> files = ["prefix_20160817_suffix", "some_other_file_with_suffix"]
>>> contains = ['prefix', '2016', 'suffix']
>>> [ f for f in files if all(c in f for c in contains) ]
['prefix_20160817_suffix']
票数 4
EN

Stack Overflow用户

发布于 2016-08-17 17:07:23

给予:

代码语言:javascript
运行
复制
>>> cond1=['prefix1', '2016', 'suffix']
>>> cond2=['201608', 'suffix']
>>> fn="prefix_20160817_suffix"

您可以使用in测试条件列表中每个子字符串的存在,并(在临时示例中)测试列表理解:

代码语言:javascript
运行
复制
>>> [e in fn for e in cond1]
[False, True, True]
>>> [e in fn for e in cond2]
[True, True]

然后,可以在单个all语句中使用它来测试所有子字符串:

代码语言:javascript
运行
复制
>>> all(e in fn for e in cond1)
False
>>> all(e in fn for e in cond2)
True

然后,您可以与filter (或使用列表理解或循环)组合起来过滤列表:

代码语言:javascript
运行
复制
>>> fns=["prefix_20160817_suffix", "prefix1_20160817_suffix"]
>>> filter(lambda fn: all(e in fn for e in cond1), fns)
['prefix1_20160817_suffix']
>>> filter(lambda fn: all(e in fn for e in cond2), fns)
['prefix_20160817_suffix', 'prefix1_20160817_suffix']
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39002391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档