函数主体有问题



我有一个函数,当且仅当 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

最新更新