Seite 1 von 1
Vervielfachen von Listenelementen
Verfasst: Mittwoch 25. Oktober 2006, 10:21
von Nirven
Hi,
ich habe ein irgendwie triviales Problem. Ich bekomme eine Liste
Daraus soll dann
werden.
Gibt es da eine bessere Möglichkeit als das:
Code: Alles auswählen
ziel = []
for i in start:
ziel.append(i)
ziel.append(i)
ziel.append(i)
Da ich das ganze mit 16 mal machen will (aus der Ergebnisliste wird ein Bild, bei dem immer Felder von 16*16 Pixel den gleichen Wert haben sollen) erscheint mir die obige Methode etwas unschön...
Ich hoffe, jemand kann mitr eine 'schönere' Möglichkeit empfehlen.
Sören
Verfasst: Mittwoch 25. Oktober 2006, 10:27
von murph
der code sagt alles^^:
Code: Alles auswählen
>>> a = [1,2,3] * 3
>>> a
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> a.sort()
>>> a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
>>>
Verfasst: Mittwoch 25. Oktober 2006, 10:43
von BlackJack
Als Einzeiler:
Allerdings könnte man auch eine etwas lesbarere Funktion schreiben:
Code: Alles auswählen
def iduplicate(iterable, count):
for item in iterable:
for dummy in xrange(count):
yield item
def main():
print list(iduplicate([1, 2, 3], 3))
Verfasst: Mittwoch 25. Oktober 2006, 11:23
von Rebecca
murph hat geschrieben:Code: Alles auswählen
>>> a = [1,2,3] * 3
>>> a
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> a.sort()
>>> a
[1, 1, 1, 2, 2, 2, 3, 3, 3]
>>>
Das ist hoechstwahrscheinlich nicht das, was Nirven will. Was ist mit [1, 2, 3, 1] oder [3, 1, 2]?
Verfasst: Mittwoch 25. Oktober 2006, 11:37
von Nirven
Ja, Rebecca hat recht. War wohl ein schlechtes Beispiel.
Die Liste muss in der ursprünglichen Reihenfolge bleiben und wird nicht sortiert sein, also kann es auch [87,5,231] geben, woraus [87,87,87,5,5,5,231,231,231] werden soll.
Verfasst: Mittwoch 25. Oktober 2006, 12:48
von Zap
Also auf die Schnelle hätte ich nur so etwas
Code: Alles auswählen
>>> [3 * [i] for i in [87,5,231]]
[[87, 87, 87], [5, 5, 5], [231, 231, 231]]
Dann müsste man nur wieder die äußere Liste zusammenfassen.
Einfach for schleife ist zu easy. Weiß aber gerade noch nicht wie es besser geht
Bin noch nicht lange genug dabei. Aber vielleicht reicht dir das ja auch schon
Oder jemand anders kann es ergänzen.
Edit: Ups ich sehe gerade BlackJack hat da schon so eine Lösung. Sorry
reduce(operator.add, ( * 3 for i in [1, 2, 3]))
Allerdings funktioniert die bei mir nicht. Muss man da noch was importieren? operator gibts bei mir , aber reduce nicht.
Verfasst: Mittwoch 25. Oktober 2006, 13:06
von Nirven
Jo Zap, ich habe jetzt ersteinmal eine for-Schleife eingebaut. Dafür sind sie ja irgendwie da, aber ich dachte es gibt eine "vorgesehene" Art, soetwas mit Listen (oder von mir aus auch Arrays) zu machen.
Reduce war bei mir kein Problem, aber es hat etwas gedauert bis ich einfach mal in die Python-Hilfe geguckt habe und das Modul "operator" fand. Jetzt probioer ich BlackJacks Vorschlag mal aus.
Danke für die Antworten
Verfasst: Mittwoch 25. Oktober 2006, 13:16
von Zap
Ach, da war ein Klammerfehler drin.
nu gehts bei mir auch. Und es kommt auch das richtige raus.
Wieder was gelernt
Code: Alles auswählen
>>> reduce(operator.add, [ [i] * 3 for i in [87,5,231] ])
[87, 87, 87, 5, 5, 5, 231, 231, 231]