簡體   English   中英

以pythonic方式比較列表項

[英]Compare list items in pythonic way

對於listl = [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) :使用zipl上迭代兩次,然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM