Comment puis-je tronquer une liste?

Si j'ai une liste et que je veux la tronquer pour qu'elle ne dépasse pas 100 éléments, comment faire?

34
demandé sur SilentGhost 2011-01-29 21:04:49

6 réponses

Pour modifier la liste en place (plutôt que de faire une copie plus courte de la liste), utilisez:

del l[100:]
64
répondu Ned Batchelder 2011-01-29 18:11:01

Vous pouvez utiliser le découpage de liste:

a = a[0:100]
13
répondu GWW 2011-01-29 18:06:11

Le items[:100] autres mentionnés vous donne une nouvelle liste qui contient les 100 premiers éléments de items. Si vous souhaitez modifier la liste en place, Utilisez items[:] = items[:100] (affectation de tranche) ou while len(items) > 100: items.pop()Utilisez del items[100:] comme proposé par Ned Batchelder.

6
répondu 2011-01-29 18:18:07

Vous pouvez utiliser le découpage si cela ne vous dérange pas simplement de créer une nouvelle copie de la liste qui ne contient que les éléments que vous voulez... cependant, cela laisse la liste d'origine non modifiée.

>>> a = [0,1,2,3,4,5,6,7,8,9]
>>> b = a[0:5]
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> b
[0, 1, 2, 3, 4]

Si vous voulez vraiment tronquer la liste d'origine, supprimez simplement les éléments que vous ne voulez pas en utilisant le découpage avec del

>>> del a[5:]
>>> a
[0, 1, 2, 3, 4]
1
répondu whaley 2011-01-29 18:14:20

La bonne réponse est, bien sûr:

>>> x = range(10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x = x[:5]
>>> x
[0, 1, 2, 3, 4]

Mais, surtout, si vous êtes intéressé par les valeurs supérieures à 100 et que vous voulez les retirer une par une pour une raison quelconque, vous pouvez également utiliser POP()

>>> x = range(10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.pop()
9
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8]

Vous pouvez même spécifier quel élément retirer:

>>> x= range(10,20)
>>> x
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> x.pop(3)
13
>>> x.pop()
19
>>> x
[10, 11, 12, 14, 15, 16, 17, 18]
>>> x.pop(-1)
18
[10, 11, 12, 14, 15, 16, 17]

Cela supprime les éléments individuels, raccourcissant la liste, sans copie.

Donc, une réponse obtus et louche (mais aussi correcte) serait d'itérer vers le bas. Je vais seulement descendre de 12 à 8 pour faciliter la lecture ici:

>>> x=range(12)
>>> for i in range(len(x), 8, -1):
...     y = x.pop()
...     print "popping x: ", y, ", x=", x
...
popping x:  11 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
popping x:  10 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
popping x:  9 , x= [0, 1, 2, 3, 4, 5, 6, 7, 8]
popping x:  8 , x= [0, 1, 2, 3, 4, 5, 6, 7]

Bien sûr, ce n'est pas optimal, mais je viens de tomber dans une situation où j'en avais besoin, alors j'ai pensé que je le partagerais ici (je tronque une liste quand je vois la première valeur not-None).

1
répondu Kevin J. Rice 2016-07-22 14:50:41

Vous pouvez faire quelque chose comme:

truncated = list[:100]
0
répondu Bryan Ward 2011-01-29 18:06:58