wake-up-neo.net

Wie können Sie eine Liste alle x Elemente aufteilen und diese x Anzahl von Elementen zu einer neuen Liste hinzufügen?

Ich habe eine Liste mit mehreren ganzen Zahlen und Zeichenfolgen

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

Ich habe Schwierigkeiten, die Liste nach 5 elements zu trennen und eine neue Liste mit nur 5 Elementen zu erstellen.

Ich möchte jedoch nicht drei verschiedene Listen, sondern nur eine, die sich jedes Mal ändert, wenn ein neuer 5 elements durchläuft.

14
Tyler

Sie möchten etwas wie:

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

print (composite_list)

Ausgabe:

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

Was meinst du mit "neuen" 5 Elementen?

Wenn Sie an diese Liste anhängen möchten, haben Sie folgende Möglichkeiten:

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

Sie könnten es in einem einzigen Satz tun wie

>>> 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))]

Dann sollte die Ausgabe sein:

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

Ich bin der Meinung, dass Sie eine neue Liste erstellen müssen, aber wenn ich das richtig verstehe, möchten Sie eine verschachtelte Liste mit 5 Elementen in jeder Unterliste.

Sie könnten Folgendes versuchen:

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])

Dadurch werden die Elemente Ihrer ersten Liste, 'l', und Gruppe 5 in einer neuen Unterliste zusammengefasst. Ausgabe:

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

Hoffe das hilft

1
Nick Burns