Python子字符串搜索不起作用

时间:2014-07-25 21:22:49

标签: python string generator

name是元组列表,它是len(1)并包含字符串

当我使用时:

if word in (name[0] for name in t):
        return name[0]
return None

然后我得到无(搜索失败)

但如果我使用相同的单词值和相同的列表:

gen=(name[0] for name in t)
for i in gen:
    if word in i:
        return i
return None

搜索成功,我得到了所需的结果。为什么会出现这种不同的行为?

2 个答案:

答案 0 :(得分:1)

if word in (name[0] for name in t)中,您实际上是在搜索确切的字符串而不是子字符串,即生成器是否包含该字符。

将其更改为使用any()

if any(word in name[0] for name in t):

<强>演示:

>>> t = [('foo',), ('bar',)]
>>> any('oo' in name[0] for name in t)
True
>>> 'oo' in (name[0] for name in t)
False
>>> 'foo' in (name[0] for name in t)
True

注意,如果你想返回匹配的项目,那么最好使用你的第二个代码(只需删除不必要的genexpr,直接遍历t),如果你只想检查是否存在子串然后使用any()。以下是使用enumeratenext并将生成器表达式用于学习目的的示例:

>>> item = next((name[0] for name in t if 'oo' in name[0]), None)
>>> if item is not None:                                         
    print item
...     
foo

答案 1 :(得分:0)

一个问题是,在第一个示例中,name不在return name[0]范围内。

如果代码返回None而不是抛出异常,那么您有另一个(全局?)变量名为name