python测试列表中所有项目中的子字符串

时间:2015-03-06 19:48:07

标签: python list if-statement

我希望像所有all()一样进行比较,以测试我的子字符串是否在列表中的每个元素中。

一些虚拟数据:

my_list = ['~/.tmp/myproject/filea', '~/.tmp/myproject/fileb']

我想测试此列表中的每个项目中是否.tmp/myproject/

2 个答案:

答案 0 :(得分:3)

all(['mysubstring' in item for item in my_list])

列表理解是进行此类检查的最佳方式,最重要的是你仍然可以使用all

Python 2.7.6 (default, Mar 22 2014, 22:59:56)
Type "help", "copyright", "credits" or "license" for more information.
>>> my_list = ['~/.tmp/myproject/filea', '~/.tmp/myproject/fileb']
>>> my_list
['~/.tmp/myproject/filea', '~/.tmp/myproject/fileb']
>>> [item for item in my_list]
['~/.tmp/myproject/filea', '~/.tmp/myproject/fileb']
>>> ['/.tmp/myproject/' in item for item in my_list]
[True, True]
>>> all(['/.tmp/myproject/' in item for item in my_list])
True

答案 1 :(得分:2)

某些时间显示了您应该使用生成器表达式的确切原因:

In [25]:  l = ["foobar" for _ in range(100000)]

In [26]:  l = ["foobar" for _ in range(100000)]

In [27]: l =  ["doh"] + l

In [28]: timeit all("foo" in s for s in l)
1000000 loops, best of 3: 541 ns per loop

In [29]: timeit all(["foo" in s for s in l])
100 loops, best of 3: 6.49 ms per loop

这里有一些很好的例子,说明如何使用生成器及其优势wiki.python.org/moin/Generators

我认为一个好的经验法则是,如果您只计划使用一次生成的元素集,或者数据太大而无法放入内存中,请使用生成器表达式。如果您想再次使用这些元素并且大小合适,那么将它们存储在列表中。