web-dev-qa-db-fra.com

Comment pouvez-vous scinder une liste de tous les x éléments et ajouter ces x éléments à une nouvelle liste?

J'ai une liste de plusieurs entiers et chaînes

['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']

Je ne parviens pas à séparer la liste tous les 5 elements et à créer une nouvelle liste contenant seulement 5 éléments.

Cependant, je ne veux pas 3 listes différentes, je veux juste une liste qui change à chaque fois qu'un nouveau 5 elements passe.

14
Tyler

Vous voulez quelque chose comme:

composite_list = [my_list[x:x+5] for x in range(0, len(my_list),5)]

print (composite_list)

Sortie:

[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]

Qu'entendez-vous par un "nouveau" 5 éléments?

Si vous souhaitez ajouter à cette liste, vous pouvez faire:

composite_list.append(['200', '200', '200', '400', 'bluellow'])
26
Serdalis

Vous pouvez le faire en une seule phrase comme

>>> import math
>>> s = ['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']
>>> [s[5*i:5*i+5] for i in range(0,math.ceil(len(s)/5))]

Ensuite, le résultat devrait être:

[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]
3
Sheng

Je pense que vous devrez créer une nouvelle liste, mais si je comprends bien, vous voulez une liste imbriquée avec 5 éléments dans chaque sous-liste.

Vous pouvez essayer ce qui suit:

l = ['-200', ' 0', ' 200', ' 400', ' green', '0', '0', '200', '400', ' yellow', '200', '0', '200', '400', ' red']

new = []
for i in range(0, len(l), 5):
    new.append(l[i : i+5])

Cela fera défiler votre première liste, "l", et regroupera les éléments 5 dans une sous-liste de nouvelle. Sortie:

[['-200', ' 0', ' 200', ' 400', ' green'], ['0', '0', '200', '400', ' yellow'], ['200', '0', '200', '400', ' red']]

J'espère que cela t'aides

1
Nick Burns