1

当且仅当 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:我必须使用!=

4

3 回答 3

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))
于 2012-11-17T20:03:54.110 回答
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
于 2012-11-17T20:03:44.417 回答
0

您的if情况可能是问题所在:

    if i in len(L1) != len(L2):

这会检查i in len(L1), butlen(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
于 2012-11-17T20:09:14.907 回答