2013-04-08 13 views
8

Mam listę wielu liczb całkowitych i ciągów znaków [-200 ',' 0 ',' 200 ',' 400 ',' green ',' 0 ',' 0 ',' 200 ',' 400 ',' yellow ',' 200 ',' 0 ',' 200 ',' 400 ',' red '] Mam trudności z oddzieleniem listy co 5 elementów i utworzeniem nowej listy z zaledwie 5 elementami w środku. Jednak nie chcę 3 różnych list, chcę tylko jeden, który zmienia za każdym razem, gdy przechodzi 5 nowych elementów.Jak można podzielić listę co x elementów i dodać te x ilość elementów do nowej listy?

Odpowiedz

19

Chcesz coś takiego:

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

print (composite_list) 

wyjściowa:

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

Co masz na myśli przez "nowych" 5 elementów?

Jeśli chcesz dołączyć do tej listy można zrobić:

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

Można to zrobić w jednym zdaniu jak

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

Następnie wyjście powinno być:

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

Sorry ~ źle zrozumieć. Natychmiast ją zaktualizuje. – Sheng

0

Czuję, że musisz utworzyć 1 nową listę, ale jeśli dobrze rozumiem, potrzebujesz zagnieżdżonej listy z 5 elementami w każdym podlista.

można spróbować następujących czynności:

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

To będzie krok po swoim pierwszym liście, „L”, oraz grupy 5 elementów razem do podmenu w nowym. Wyjście:

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

Nadzieja to pomaga

Powiązane problemy