我希望像所有all()
一样进行比较,以测试我的子字符串是否在列表中的每个元素中。
一些虚拟数据:
让my_list = ['~/.tmp/myproject/filea', '~/.tmp/myproject/fileb']
我想测试此列表中的每个项目中是否.tmp/myproject/
。
答案 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
我认为一个好的经验法则是,如果您只计划使用一次生成的元素集,或者数据太大而无法放入内存中,请使用生成器表达式。如果您想再次使用这些元素并且大小合适,那么将它们存储在列表中。