【问题标题】:Comparing elements in two lists in python比较python中两个列表中的元素
【发布时间】:2018-10-25 02:46:13
【问题描述】:

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

    您不需要在第二个代码中使用三元运算符 (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)])
    

    【讨论】:

    • 正确,但可能值得一提的是,您也不需要在第一个代码中使用三元。
    • 确实如此。为完整性而编辑。谢谢。
    • 哦,好的。愚蠢的错误!可能是我会在更多的练习后停止制作这些。感谢您的回答和更正。
    • 你甚至不需要sum中的方括号
    猜你喜欢
    • 2014-01-07
    • 2019-12-07
    • 2019-09-22
    • 1970-01-01
    • 2015-11-06
    • 2020-07-04
    • 1970-01-01
    相关资源
    最近更新 更多