比较python中两个列表中的元素

比较python中两个列表中的元素,python,python-3.x,list,list-comprehension,Python,Python 3.x,List,List Comprehension,我有一个函数,它比较两个列表的元素并返回它们之间的差异。我有两个版本。第一个有效,但第二个无效。第二个函数有什么问题?输入a和b是两个长度相同的列表 def compareLists(a, b): A = sum([1 if i > j else 0 for i, j in zip(a, b)]) B = sum([1 if j > i else 0 for i, j in zip(a, b)]) return (A, B) def compareLists

我有一个函数,它比较两个列表的元素并返回它们之间的差异。我有两个版本。第一个有效,但第二个无效。第二个函数有什么问题?输入a和b是两个长度相同的列表

def compareLists(a, b):
    A = sum([1 if i > j else 0 for i, j in zip(a, b)])
    B = sum([1 if j > i else 0 for i, j in zip(a, b)])
    return (A, B)

def compareLists(a, b):
    A = sum([1 for i in range(0, len(a)) if a[i] > b[i] else 0])
    B = sum([1 for i in range(0, len(a)) if b[i] > a[i] else 0])
    return (A, B)

例如输入和输出:
a=[1,2,3,4]
<代码>b=[0,-2,5,6]<代码>输出=(2,2)

在第二个代码中不需要三元运算符(
if else
),因为在列表中使用
if
表达式是过滤输出的方式:

A = sum([1 for i in range(0, len(a)) if a[i] > b[i]])
B = sum([1 for i in range(0, len(a)) if b[i] > a[i]])
在第二个代码中添加
else
会使语法无效

为了完整性,正如@wim在注释中指出的,在第一个代码中不需要使用三元运算符,因为Python中的布尔值只是
1
0
的整数,因此您可以直接输出比较运算符返回的布尔值:

A = sum([i > j for i, j in zip(a, b)])
B = sum([j > i for i, j in zip(a, b)])

正确,但可能值得一提的是,您也不需要在第一个代码中使用三元。为完整性而编辑。谢谢。哦,好的。愚蠢的错误!也许我会在更多的练习后停止做这些。谢谢您的回答和更正。您甚至不需要
sum