我有这样的功能:
def checks(a,b):
for item in a:
if b[1] == item[1]:
return True
else:
return False
我想检查b的第二个值是否在item的第二个值中,例如:
checks(['5v','7y'],'6y')
>>> True
但我现在拥有的代码将返回False
,因为我相信它会将'6y'
与'5v'
进行比较。我该如何解决这个问题?
答案 0 :(得分:3)
您在正确的位置返回True
,但如果第一项不匹配,则函数立即返回False
,而不是继续循环。只需将return False
移动到循环外的函数末尾:
def checks(a,b):
for item in a:
if b[1] == item[1]:
return True
return False
如果项目匹配,则会返回 True
,如果循环结束而没有匹配,则会返回False
。
无论如何,这解释了为什么你的代码不起作用,但使用其他人建议的any
是Pythonic。 =)
答案 1 :(得分:2)
这可以用更简单的方式表达:
def checks(a, b):
return any(b[1] == item[1] for item in a)
答案 2 :(得分:2)
您可以在此处使用any()
:
def checks(a,b):
return any (b[1] == item[1] for item in a)
>>> checks(['5v','7y'],'6y')
True
>>> checks(['5v','7z'],'6y')
False
any
的帮助:
>>> print any.__doc__
any(iterable) -> bool
Return True if bool(x) is True for any x in the iterable.
If the iterable is empty, return False.