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

问题描述 投票:1回答:1

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

python python-3.x list list-comprehension
1个回答
1
投票

您不需要第二个代码中的三元运算符(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中的布尔值只是10的整数,因此您可以直接输出比较运算符返回的布尔值代替:

A = sum([i > j for i, j in zip(a, b)])
B = sum([j > i for i, j in zip(a, b)])
© www.soinside.com 2019 - 2024. All rights reserved.