我有一个像这样的字符串列表:
filterlist = ["Apple", "Banana", "Cherry"]
我想循环遍历这个并检查这些字符串中的任何一个是否作为另一个字符串的一部分存在,如
test_str = "An Apple a day keeps the Doctor away"
这就是我尝试过的成功:
for f in filterlist:
if test_str.__contains__(f):
doSomething()
但是我尝试了以下操作但它没有用:
if test_str.__contains__(f for f in filterlist):
doSomething()
第一种和第二种技术有什么区别? f for f in filterlist
做了什么?
答案 0 :(得分:3)
使用any
如果iterable的任何元素为true,则返回True。如果iterable为空,则返回False。
>>> test_str = "An Apple a day keeps the Doctor away"
>>> filterlist = ["Apple", "Banana", "Cherry"]
>>> any(i in test_str for i in filterlist)
True
答案 1 :(得分:3)
f for f in filterlist
做了什么?
它是generator expression,它会创建一个生成器对象:
>>> type(x for x in [])
<type 'generator'>
test_str.__contains__(f for f in filterlist)
字面上检查该生成器是否在test_str
*;鉴于你只是创造了它,它不可避免地会成为它。
作为Avinash has pointed out,使用any
是将第一个代码转换为单行的正确方法。
* 请注意,foo.__contains__(bar)
通常更为清晰,bar in foo