if ... else ..通过python比较字符列表和字符串

时间:2018-04-08 17:35:21

标签: python

我正在写一个for循环比较list和string中的字符,如果字符不相同则返回False。但我一直接受真实。有人可以解释我的代码有什么问题吗?



def compare (sofar, orig):
    if len(sofar) == len(orig):
        for i in range(len(orig)+1):
            if orig[i] == sofar[i]:
                return True
            else:
                return False
            
    return False




这是我得到的结果:

In [29]: compare (['a','v','c','c','s'], 'abccs')
Out[29]: True

但它假设是假的

3 个答案:

答案 0 :(得分:0)

您可以将字符重新加入字符串

def compare (sofar, orig):
    return ''.join(sofar) == orig

否则,如果您想要循环,则需要在返回True之前比较所有字符。当第一个不匹配

时,您可以返回False

这是另一个在压缩字符循环上使用all()的衬垫。

您需要在本声明之前进行长度检查

return all(x == y for x, y in zip(sofar, orig))

或者回到原始代码,反转你的逻辑

def compare (sofar, orig):
    if len(sofar) != len(orig):
        return False
    for i in range(len(orig)):
        if orig[i] != sofar[i]:
            return False

    return True

答案 1 :(得分:0)

如果您的功能达到了return声明,那就是它。您的函数已返回一个值,它将无法继续运行。

您可以使用generator来实现您的逻辑。以下解决方案允许您懒洋洋地迭代;通过list检索带有字母对照的布尔列表;或检查所有字母是否通过all对齐。

def compare(sofar, orig):
    if len(sofar) == len(orig):
        for i in range(len(orig)):
            if orig[i] == sofar[i]:
                yield True
            else:
                yield False

res = list(compare(['a','v','c','c','s'], 'abccs'))

# [True, False, True, True, True]

res = all(compare(['a','v','c','c','s'], 'abccs'))

# False

在没有显式迭代的情况下编写逻辑的另一种方法:

lst = ['a','v','c','c','s']
mystr = 'abccs'

res = ''.join(lst) == mystr

答案 2 :(得分:0)

语句返回是从您的函数退出。 所以你的编程只比较第一个元素。

 if orig[i] != sofar[i]:
            return False

会这样做