我有一个函数,比较两个列表的元素,并返回它们之间的差异。我有两个版本。第一个工作但不是第二个工作。第二个功能有什么问题?输入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]
; output = (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)])