2010-03-24 5 views
2

Hey im new to python. Comment obtenez-vous une partie d'une liste par la valeur relative de sa clé de tri?Division d'une liste en python

exemple ...

 
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] 

Répondre

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] 

ou avec filtre (serait un peu plus lent si vous avez grande liste, en raison de lambda)

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

Utiliser 'lambda' avec' filter' et 'map' est stupide. La forme de compréhension de liste satisfait tellement cela. –

+0

Notez que le résultat a les numéros dans le même ordre que la liste d'origine. Si vous avez besoin d'être triés vous devez utiliser 'trié (x pour x dans l si x> 13)' –

+0

merci @gnibbler, ajouté – YOU

3

Utilisez [item for item in newList if item > 13].

Il y a une chance décente que cela puisse être remplacé par l'expression de générateur (item for item in newList if item > 13), qui filtre paresseusement plutôt que de stocker toute la liste en mémoire.


Vous pourriez également être intéressé à changer le code juste un peu à quelque chose comme

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) 

qui effectue le tri-pire des cas O (n log n) démarrage de l'opération que les valeurs filtrées .

+1

Merci, c'est très utile – mglmnc