我之前已经找到了这个问题的一些答案,但是对于当前的Python版本来说它们似乎已经过时了(或者至少它们对我不起作用)。
我想检查字符串列表中是否包含子字符串。我只需要布尔结果。
我找到了这个解决方案:
word_to_check = 'or'
wordlist = ['yellow','orange','red']
result = any(word_to_check in word for word in worldlist)
从这段代码我希望获得True
值。如果单词是“der”,则输出应为False
。
但是,结果是生成器函数,我找不到获取True
值的方法。
有什么想法吗?
答案 0 :(得分:29)
使用 any()发布的代码是正确的,除非您在某处重新定义它,否则应该有效。
也就是说,通过在单个组合字符串上使用子字符串搜索,可以获得简单快速的解决方案:
>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)
>>> 'or' in combined
True
>>> 'der' in combined
False
这比使用 any 的方法更快 。连接字符可以是单词列表中某个单词中不出现的任何字符。
答案 1 :(得分:28)
您可以从any
导入__builtin__
,以防它被其他any
替换:
>>> from __builtin__ import any as b_any
>>> lst = ['yellow', 'orange', 'red']
>>> word = "or"
>>> b_any(word in x for x in lst)
True
请注意,在Python 3中,__builtin__
已重命名为builtins
。
答案 2 :(得分:8)
您可以改为使用next
:
colors = ['yellow', 'orange', 'red']
search = "or"
result = next((True for color in colors if search in color), False)
print(result) # True
显示包含子字符串的字符串:
colors = ['yellow', 'orange', 'red']
search = "or"
result = [color for color in colors if search in color]
print(result) # Orange
答案 3 :(得分:0)
此外,如果有人想检查字典的任何值是否作为字符串列表中的子字符串存在,可以使用:
list_a = [
'Copy of snap-009ecf9feb43d902b from us-west-2',
'Copy of snap-0fe999422014504b6 from us-west-2',
'Copy of snap-0fe999422014cscx504b6 from us-west-2',
'Copy of snap-0fe999422sdad014504b6 from us-west-2'
]
dict_b = {
'/dev/xvda': 'snap-0fe999422014504b6',
'/dev/xvdsdsa': 'snap-sdvcsdvsdvs'
}
for b1 in dict_b.itervalues():
result = next( ("found" for a1 in a if b1 in a1), "not found")
print result
打印
not found
found