[英]Compare list items in pythonic way
對於list
說l = [1, 2, 3, 4]
如何以Python方式比較l[0] < l[1] < l[2] < l[3]
?
那這個呢:
l == sorted(l)
有一種通用的方法,該方法包括使用偏移量將列表自身壓縮。
在這種情況下,您可以將其包裝為列表理解:
[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)
:使用zip
在l
上迭代兩次,然后使用all
遍歷壓縮值一次。
另一方面, l == sorted(l)
看起來很聰明並且很優雅,但是您必須支付對l
進行排序的O(n*log(n))
成本。 如果您的目標是對l
進行排序l
如果未排序),則直接調用l.sort()
。
嘗試這個:
comparisons = [l[i] < l[i+1] for i in range(len(l) - 1)]
你可以這樣
all(l[x]<l[x+1] for x in range(len(l)-1))
另一種方法是使用.sort()方法,在這種情況下,您必須完全返回一個新列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.