Seite 1 von 1
liste einteilen
Verfasst: Mittwoch 11. Februar 2015, 11:48
von haeuslermartin
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
Re: liste einteilen
Verfasst: Mittwoch 11. Februar 2015, 11:54
von EyDu
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.
Re: liste einteilen
Verfasst: Mittwoch 11. Februar 2015, 12:29
von haeuslermartin
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 ...
Re: liste einteilen
Verfasst: Mittwoch 11. Februar 2015, 12:34
von MagBen
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)]
Re: liste einteilen
Verfasst: Mittwoch 11. Februar 2015, 15:14
von haeuslermartin
tausen Dank, MagBen!
Re: liste einteilen
Verfasst: Dienstag 24. Februar 2015, 11:59
von haeuslermartin
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 ...
Re: liste einteilen
Verfasst: Dienstag 24. Februar 2015, 12:09
von 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]]
Re: liste einteilen
Verfasst: Dienstag 24. Februar 2015, 15:28
von haeuslermartin
exaktement, danke,

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