使用带有python str.find()的if

时间:2013-11-25 18:29:24

标签: python

我试图用Python解析以下字符串:At 11:00 am EST, no delay, 7 lane(s) open。我需要阅读它以查看它是否包含字符串no delay。我使用以下内容来解析它:contents_of_tunnel.find("no delay")

这很好。但是当我在if/else中使用它时,如下所示:

>>> if contents_of_tunnel.find("no delay") == True:
...   print 1
... else:
...   print 0
... 
0

归零。为什么是这样?我认为问题出在第一行,即第一行:>>> if contents_of_tunnel...

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

也许你想要这样的东西:

if 'no delay' in contents_of_tunnel: print 1
else: print 0

或只是

print 1 if 'no delay' in contents_of_tunnel else 0

答案 1 :(得分:4)

find(...)
  S.find(sub [,start [,end]]) -> int

  Return the lowest index in S where substring sub is found,
  such that sub is contained within S[start:end].  Optional
  arguments start and end are interpreted as in slice notation.

  Return -1 on failure.

这将打印1的唯一方法是contents_of_tunnel以“无延迟”开头,因为返回的索引将为0. -1评估为True

您应该使用:

if contents_of_tunnel.find("no delay") != -1:

if "no delay" in contents_of_tunnel:

try:
    index = contents_of_tunnel.index("no delay")
    # substring found
except ValueError:
    # substring not found        

答案 2 :(得分:0)

原因是contents_of_tunnel.find("no delay")返回一个数字。因此,请使用== True,而不是使用!= -1。这样它就可以达到你的预期。