2010-03-24 102 views
2

嗨im新的python。你如何通過排序鍵的相對值得到列表的一部分。在python中分割列表

例如...

 
list = [11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10] 
list.sort() 
newList = list.split("all numbers that are over 13") 
assert newList == [14,15,16] 

回答

3
>>> l = [11,12,13,14,15,16,1,2,3,4,5,6,7,8,9,10] 
>>> sorted(x for x in l if x > 13) 
[14, 15, 16] 

或過濾器(會稍微慢一點,如果你有,因爲拉姆達的大名單,)

>>> sorted(filter(lambda x: x > 13, l)) 
[14, 15, 16] 
+1

在'filter'和'map'中使用'lambda'是愚蠢的。列表理解形式更好地滿足了這一點。 – 2010-03-24 04:10:35

+0

請注意,結果中的數字與原始列表的順序相同。如果你需要對它們進行排序,你應該使用'sorted(x for x in l if x> 13)' – 2010-03-24 04:21:05

+0

謝謝@gnibbler,增加 – YOU 2010-03-24 04:23:56

3

使用[item for item in newList if item > 13]

這是一個很好的機會,可以用發生器表達式​​替代,它可以過濾而不是將整個列表存儲在內存中。


您可能也有興趣在改變代碼只是有點像

all_numbers = [11, 12, 13, 14, 15, 16, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
filtered_sorted_numbers = sorted(number for number in all_numbers if number > 13) 

執行分揀的最壞情況爲O(n log n)的操作僅在過濾後的值。

+1

謝謝,這非常有用 – mglmnc 2010-03-24 04:08:43