Python:如何检查每个列表项在字符串中的存在性
在Python中,最优雅的方法来检查路径中是否包含每个目录名,比如 ['spam', 'eggs']
,例如 "/home/user/spam/eggs"
是什么呢?
使用示例(虽然这个示例不能直接运行,但能帮助说明我的情况):
dirs = ['spam', 'eggs']
path = "/home/user/spam/eggs"
if path.find(dirs):
print "All dirs are present in the path"
谢谢
5 个回答
2
names = ['spam', 'eggs']
dir = "/home/user/spam/eggs"
# Split into parts
parts = [ for part in dir.split('/') if part != '' ]
# Rejoin found paths
dirs = [ '/'.join(parts[0:n]) for (n, name) in enumerate(parts) if name in names ]
parts = "/home/user/spam/eggs".split('/')
print all(dir in parts for dir in ['spam', 'eggs'])
编辑:如果你只是想检查所有的文件夹是否存在:
5
看起来你想要的是这样的东西…:
if all(d in path.split('/') for d in dirs):
...
这种一行代码的写法效率不高,因为它每次都要对路径进行分割(而且分割会生成一个列表,而用集合会更适合检查是否包含某个元素)。如果把它改成两行代码的话:
pathpieces = set(path.split('/'))
if all(d in pathpieces for d in dirs):
...
性能会大大提升。
9
set.issubset
:
这个方法是用来检查一个集合(set)是否是另一个集合的子集。简单来说,就是看一个集合里的所有元素是否都在另一个集合里。
比如说,如果你有一个集合A,里面有1、2、3,而集合B里面有1、2、3、4、5。那么集合A就是集合B的子集,因为A里的所有元素(1、2、3)都在B里。
这个方法可以帮助你判断集合之间的关系,特别是在处理数据时非常有用。
>>> set(['spam', 'eggs']).issubset('/home/user/spam/eggs'.split('/'))
True