1

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

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

提前致谢!

4

2 回答 2

5

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

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

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

all(x <= y for x, y in zip(t1, t2))
=> True
于 2013-08-28T21:17:31.433 回答
2

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

return not t1 > t2

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

于 2013-08-28T21:22:41.240 回答