这两个语句是否相等?python:if row [1] .upper()。find(brand)!= - 1:
if row[1].upper().find(brand)!=-1:
和
if row[1].upper().find(brand):
这两个语句是否相等?python:if row [1] .upper()。find(brand)!= - 1:
if row[1].upper().find(brand)!=-1:
和
if row[1].upper().find(brand):
不,他们是不相等的。在Python中,任何非零数字都被视为True,所以如果表达式计算结果为-1,则第二个语句将被视为true;如果表达式的计算结果为0(当它应该为true),则返回false。
使用第一条语句。
号第一个将评估为false
只有find()
回报-1
。
只有当find()
返回0
时,第二个才会评估为false
。
这甚至会给你错误的结果,因为0
意味着子串是在字符串的开头找到的。因此,如果子字符串在开头,则该语句将评估为false
,如果未找到该子句,则该值为true
。
不,当然不是。
第一个检查结果是否为-1
,另一个检查结果是否是Python认为是“false”的结果。 Python不被认为是错误的-1
。
为了解释find()
方法做什么:
>>> "hello".find("l")
2
>>> "hello".find("he")
0
>>> "hello".find("x")
-1
-1
是一个“神奇的价值”为“找不到搜索字符串”。与index()
进行对比:
>>> "hello".index("l")
2
>>> "hello".index("he")
0
>>> "hello".index("x")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
就个人而言,我更喜欢index()
,因为通常情况下,魔法值应在Python皱起了眉头,而异常处理是Python的方式来做到这一点 - “EAFP”(它更容易请求原谅比许可) 。
在你的情况下,它看起来像“LBYL”编程风格(看你跳跃之前),虽然你没有显示很多上下文,所以我不知道if
声明是什么决定。
正如其他人所说,没有那些陈述是不相同的。然而,当你只需要找到如果的子存在,而不是哪里,我更喜欢in
运营商,而不是.find()
,如:
if brand in row[1].upper():
这相当于第一条语句,但更简洁易于阅读。
最常见的答案是正确的。但我发现阅读in
比使用数字结果更容易。即,
>>> row
[[1, 'lysol']]
>>> brand
'Lysol'
>>> brand.upper() in row[0][1].upper()
True
>>>
尽管“Schlysol”品牌出现后,所有投注都关闭。嗯。
非常感谢您的帮助! – 2010-07-29 17:45:17