功能正文中有问题

时间:2012-11-17 20:01:16

标签: python python-3.x

我有一个函数必须返回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:我必须使用!=

3 个答案:

答案 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}}