liste einteilen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

hallo Experten,
nochmal eine Anfängerfrage (ich finde in meinem Buch und beim googeln nur immer die grundsätzlichen Sachen, Methoden, Operatoren usw,
aber es gibt ja jede Menge mehr Sachen, die man mit einer Liste machen kann ..z.B:)

eine Liste mit vielen Ganzzahlen, vielleicht 2- oder 300, soll in jeweils 5 hintereinanderfolgende Elemente eingeteilt werden, oder in neue Listen ..
ein Element kommt hinzu, das letzte fällt weg. also i0:i4, dann i1:i5, dann i2:i6 usw

c=[1,3,44,3,55,23,7,24,6,26,78,45,22,17,37,55...]
ca =[1,3,44,3,55]
cb= [3,44,3,55,23]
...
clast=[45,22,17,37,55]
kann mir da nochmal einer helfen?
Danke im voraus
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

haeuslermartin hat geschrieben:kann mir da nochmal einer helfen?
Schreibe dir ein Beispiel auf Papier auf und löse das vollständig per Hand. Dann solltest du verstanden haben, wie du vorgehen musst. Mehr als Schleifen und ein wenig Nachdenken brauchst du für das Problem nicht.
Das Leben ist wie ein Tennisball.
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

das habe ich schon versucht, und bin bis hierher vorgedrungen:
>>> c=[2,4,6,44,31,37,66,44,33,22,11]
>>> for i in c:
b=c[0:4]

>>> b
[2, 4, 6, 44] #ok !
>>> for i in c:
b=c[0+1:4+1]

>>> b
[4, 6, 44, 31] #die nächsten4 !
>>>
aber da muss ich ja immer einzeln definieren, ich kriege es nicht hin, alle Varianten auf einmal zu bekommen ...
sorry ...
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Code: Alles auswählen

c=[1,3,44,3,55,23,7,24,6,26,78,45,22,17,37,55]
c_sub5 = [c[i:i+5] for i in range(len(c)-5+1)]
a fool with a tool is still a fool, www.magben.de, YouTube
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

tausen Dank, MagBen!
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

hallo Experten, hallo MagBen,
ein weiteres Gedankenspiel: was ist, wenn ich c_sub5 nicht von jedem unmittelbar folgenden Element haben will, sonder nur z.B. von jedem dritten,
also [1,3,44,3,55], dann [3,55,23,7,24], dann [7,24,6,26,78], usw.

c_sub5 = [c[i:i+5] for i in range(len(c[i:3])-5+1)], funktioniert nicht, -aber es muß ja der zweite Ausdruck in der Zeile sein,
der erste legt doch die Länge der Periode fest, (5 Werte), for i in range(len(c[])-5+3)] hab ich auch schon probiert, ...

hab auch schon versucht zuerst: und dann die Schleife:

b= c[::3]
for i in b:
c_sub5 = c[i:i+5] geht auch nicht ... weil das ursprüngliche c nicht mehr da ist ??

könnte ich nochmal einen Tipp bekommen?
Würde mich ja gerne mit einem Bier bedanken, aber die virtuellen schmecken ja nicht ...
BlackJack

haeuslermartin: Du meinst also das `i` in Dreierschritten hochgezählt werden soll?

Code: Alles auswählen

In [153]: [c[i:i + 5] for i in range(0, len(c) - 5 + 1, 3)]
Out[153]: 
[[1, 3, 44, 3, 55],
 [3, 55, 23, 7, 24],
 [7, 24, 6, 26, 78],
 [26, 78, 45, 22, 17]]
haeuslermartin
User
Beiträge: 66
Registriert: Sonntag 21. April 2013, 10:12

exaktement, danke,
:P von range 0 ausgehen und die Schrittweite hintendran,
ich wusste schon was c[1,4,3] bedeuted, aber in diesem Fall hab ich es nicht gecheckt ..

tausend Dank
Antworten