我有一个函数必须返回True,当且仅当L1中的所有整数都是L2中相应位置的字符串长度时。和前提条件: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:我必须使用!=
答案 0 :(得分:1)
更正了您的代码版本:
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))
答案 1 :(得分:0)
使用内置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
答案 2 :(得分:0)
您的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
语句可以正常工作:
zip
如果您想获得更多Pythonic,请使用def are_lengths_of_strs(L1, L2):
for a, b in zip(L1, L2)
if a != len(b):
return False
return True
:
{{1}}