对于list
说l = [1, 2, 3, 4]
,我该如何以Python方式比较l[0] < l[1] < l[2] < l[3]
?
答案 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)
的复杂性:您使用l
在zip
上迭代两次,然后使用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()方法,在这种情况下,您必须完全返回一个新列表。