以pythonic方式比较列表项

时间:2019-07-19 11:26:59

标签: python python-3.x

对于listl = [1, 2, 3, 4],我该如何以Python方式比较l[0] < l[1] < l[2] < l[3]

5 个答案:

答案 0 :(得分:3)

这是什么:

l == sorted(l)

答案 1 :(得分:1)

有一种通用的方法,其中包括将列表自身以偏移量压缩。

在这种情况下,您可以将其包装为列表理解:

[a < b for a, b in zip(l[:-1], l[1:])]
# [l[0] < l[1], l[1] < l[2], ...]

这将为您提供布尔值列表。 要检查列表是否全局排序,可以使用all

all([a < b for a, b in zip(l[:-1], l[1:])])

但是,您不需要构建实际列表,生成器就足够了:

all(a < b for a, b in zip(l[:-1], l[1:]))

请注意,省略了方括号[]:理解的元素将被懒惰地求值,这将避免创建无用的列表。

此解决方案具有O(n)的复杂性:您使用lzip上迭代两次,然后使用all遍历压缩值一次。

另一方面,l == sorted(l)看起来很聪明且优雅,但是您必须支付O(n*log(n))进行l排序的费用。 如果您的目标是对l进行排序(如果未排序),则直接调用l.sort()

答案 2 :(得分:1)

尝试一下:

comparisons = [l[i] < l[i+1] for i in range(len(l) - 1)] 

答案 3 :(得分:0)

您可以这样做

all(l[x]<l[x+1] for x in range(len(l)-1))

答案 4 :(得分:0)

另一种方法是使用.sort()方法,在这种情况下,您必须完全返回一个新列表。