2010-03-24 2 views
2

Привет, новый для 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

Использование 'lambda' с' filter' и 'map' является глупым. Форма понимания списка удовлетворяет, что намного лучше. –

+0

Обратите внимание, что результат имеет номера в том же порядке, что и исходный список. Если вам нужно их сортировать, вы должны использовать 'sorted (x for x in l if x> 13)' –

+0

спасибо @gnibbler, добавлено – YOU

3

Использование [item for item in newList if item > 13].

Существует неплохая возможность заменить это генераторное выражение (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 журнал N) операционно-на только отфильтрованные значения ,

+1

Спасибо, это очень полезно – mglmnc