我有一个函数,当且仅当 L1 中的所有整数都是 L2 中相应位置的字符串长度时,它必须返回 True。 和前提条件:len(L1) == len(L2)。
例:
>>> are_lengths_of_strs([4, 0, 2], ['abcd', '', 'ef'])
True
下面是函数:
def are_lengths_of_strs(L1, L2):
result = True
for i in range(len(L1)):
if i in len(L1) != len(L2):
result = False
return result
它会导致错误。if i in len(L1) != len(L2):
行是错误的.有人可以帮助我这一行吗?
Obs : 我必须使用!=
代码的更正版本:
def are_lengths_of_strs(L1, L2):
result = True
for i in range(len(L1)):
if L1[i] != len(L2[i]):
result = False
return result
请注意,这不是pythonic,因为实际上这里不需要索引:
def are_lengths_of_strs(L1, L2):
result = True
for i, l in zip(L1, L2)
if i != len(l):
result = False
return result
甚至更短:
def are_lengths_of_strs(L1, L2):
return all(i == len(l)
for i, l in zip(L1, L2))
您的if
条件可能是问题所在:
if i in len(L1) != len(L2):
这将检查是否i in len(L1)
,但len(L1)
是一个整数,不能"包含"另一个数字。
您必须遍历每个列表的元素:
def are_lengths_of_strs(L1, L2):
result = True
for i in range(len(L1)):
if L1[i] != len(L2[i]):
result = False
return result
另外,摆脱result
.一个简单的return
语句就可以了:
def are_lengths_of_strs(L1, L2):
for i in range(len(L1)):
if L1[i] != len(L2[i]):
return False
return True
如果你想获得更多的Pythonic,请使用zip
:
def are_lengths_of_strs(L1, L2):
for a, b in zip(L1, L2)
if a != len(b):
return False
return True
内置all()
和zip()
:
In [5]: all(x==len(y) for x,y in zip([4, 0, 2], ['abcd', '', 'ef']))
Out[5]: True
或者如果!=
是强制使用的any()
:
In [7]: not any(x != len(y) for x,y in zip([4, 0, 2], ['abcd', '', 'ef']))
Out[7]: True
或改进代码:
def are_lengths_of_strs(L1, L2):
for x,y in zip(L1,L2):
if x!=len(y):
return False
return True
In [12]: are_lengths_of_strs([4, 0, 2], ['abcd', '', 'ef'])
Out[12]: True