【问题标题】:more concise comparison of two lists?两个列表的更简洁的比较?
【发布时间】:2013-08-28 21:15:53
【问题描述】:

我想知道python中是否有一种通用的方法可以比这更简洁地比较两个列表中的元素(例如列表1中的元素大于列表2中的元素):

    t1 = [1,1,0]
    t2 = [2,2,1]
    for I in range(len(t1)):
        if t1[I] > t2[I]:
            return False

提前致谢!

【问题讨论】:

    标签: python list compare


    【解决方案1】:

    使用any()all()(分别)测试条件是否适用于列表中的任何元素或所有元素,再加上zip 将两个列表结合在一起。例如,问题中的代码可以更简洁地实现如下:

    not any(x > y for x, y in zip(t1, t2))
    => True
    

    或者等效地,正如 @squiguy 在 cmets 中指出的那样:

    all(x <= y for x, y in zip(t1, t2))
    => True
    

    【讨论】:

    • 对我来说说all(x &lt; y for x, y in zip(t1, t2))更自然。
    • @squiguy 好电话,我根据您的建议编辑了我的答案。谢谢!
    • 谢谢!我喜欢它是比较的通用解决方案。
    【解决方案2】:

    列表(和一般的序列)按字典顺序(逐个元素)进行比较,完全符合您的要求。所以,你的循环相当于:

    return not t1 > t2
    

    当然,如果两个列表的长度不同,则会有不同的处理方式(例如,您的代码将返回 IndexError 在某些情况下另一个会返回 False)。但实际上,您必须定义在这些情况下您想要发生的确切情况,然后为它们实际编码测试将很容易——除了一半时间,您想要的正是默认列表比较已经完成的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2016-09-04
      相关资源
      最近更新 更多