Python 检查子字符串是否在字符串列表中?

Python 检查子字符串是否在字符串列表中?,python,string,list,Python,String,List,我以前已经找到了这个问题的一些答案,但是它们对于当前的Python版本来说似乎已经过时了(或者至少它们对我不起作用) 我想检查字符串列表中是否包含子字符串。我只需要布尔结果 我找到了这个解决方案: word_to_check = 'or' wordlist = ['yellow','orange','red'] result = any(word_to_check in word for word in worldlist) 从这段代码中,我希望得到一个True值。如果单词是“der”,那么

我以前已经找到了这个问题的一些答案,但是它们对于当前的Python版本来说似乎已经过时了(或者至少它们对我不起作用)

我想检查字符串列表中是否包含子字符串。我只需要布尔结果

我找到了这个解决方案:

word_to_check = 'or'
wordlist = ['yellow','orange','red']

result = any(word_to_check in word for word in worldlist)
从这段代码中,我希望得到一个
True
值。如果单词是“der”,那么输出应该是
False

但是,结果是一个生成器函数,我找不到一种方法来获得
True


有什么想法吗?

您可以从
\uuuuuu内置
中导入
任何
,以防它被其他
任何
替换:

>>> 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中,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

要显示包含子字符串的字符串,请执行以下操作:

colors = ['yellow', 'orange', 'red'] 
search = "or"

result = [color for color in colors if search in color]  

print(result) # Orange
您使用any()发布的代码是正确的,应该可以工作,除非您在某个地方重新定义了它

也就是说,通过在单个组合字符串上使用子字符串搜索,可以得到一个简单而快速的解决方案:

>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)

>>> 'or' in combined
True
>>> 'der' in combined
False

这应该比使用任何方法都快得多。连接字符可以是单词列表中某个单词中未出现的任何字符。

如果有人想检查字典中的任何值是否作为字符串列表中的子字符串存在,可以使用以下方法:

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

您发布的代码工作正常(除了
wordlist
/
worldlist
)。我猜您以前尝试调用时忘记了
any()
调用。我没有注意到您已经使用了
any
。查看您的代码和注释,我认为问题在于我使用的“any”函数。它可能是numpy模块中的任意函数。因此,解决方案是使用内置函数,但在导入numpy模块后,您知道如何做到这一点吗?在使用
ipython--pylab时,我总是会遇到这个问题,它“有益地”为您从numpy导入*。在这种情况下,您可以直接使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。另外@DSM:numpy的行为显然是
any。在1.7中,any
发生了变化(情况更糟)。此外,请参见下面的新答案,该答案显示了一种更快的替代方法,将单词组合成单个字符串。您可以使用
numpy来解决此问题。any
如果使用列表comp而不是生成器:
np.any([x中的单词表示lis中的x])
@MarkTolonen
np。任何
都会很慢,因为它首先生成整个列表。相对较慢是的,明显较慢…只有OP可以说,但他的例子中没有:)这看起来是找到带有子字符串的对象的好方法,也可以用于检查结果长度的真/假目标数组。在我看来,这是迄今为止最有用和最简单的解决方案。它也可以缩短为一行:
”或“in'\t”。join(wordlist)
比遍历列表并在每个项上使用“in”表达式快得多。为什么要使用“\t”而不是“?
not found
found