Seite 1 von 1

List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 12:31
von Septias
Hallo,

Ich habe eine Liste mit zwei Items z.B

Code: Alles auswählen

list = [200,200,"text"]
Nun brauche ich ne abgewandelte Form von der Liste in einer anderen Variabel.

Code: Alles auswählen

new_list = list[...]
Ich würde nun gerne bei der Wertzuweisung gleichzeitig ein paar Items aus der Liste Veränder. Geht das ?

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 13:33
von snafu
Mach eine neue LC, wo die Veränderungen zum Tragen kommen. Beispiel:

Code: Alles auswählen

values = [1,2,3,4,5,6,7,8,9,10]
new_values = [value * 2 for value in values]
Ansonsten bitte ein paar Infos zum Hintergrund: Was ist in den Listen gespeichert (Zahlen, Text, ...)? Reden wir von sehr großen Listen? Dann wären möglicherweise Numpy-Arrays eine bessere Lösung.

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 14:20
von Septias
Ne, so meine ich das nicht. Meistens bruche ich ne Abgewandelte For einer Variabel in einer neuen.

Ich habe nämich einen Code in dem ich unter einer Position

Code: Alles auswählen

 position = [100,200]
einen Text anbringen möchte.
Also

Code: Alles auswählen

text_position = position[...]
. Dafür muss ich aber dann den zweiten Wert alleine änder. Geht das gleich in der Wertzuweisung ?

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 14:52
von snafu
Tut mir leid, aber zumindest ich werde nicht ganz schlau aus deinen Beschreibungen. Versuche doch nochmal, dein Ziel in verständlicher Form zu beschreiben. Ansonsten musst du hoffen, dass jemand anders dich versteht.

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 15:27
von __deets__
Wenn ich das richtig verstehe willst du eine abgewandelte Kopie Liste, wo sich nur an ausgewaehlten Stellen etwas veraendert hat.

Das geht nicht mit einer kompakten, eingebauten Syntax. Aber man kann sich natuerlich eine Hilfsfunktion schreiben, und das zB so machen:

Code: Alles auswählen



def copy_and_change(original, *replacements):
    replacements = dict(replacements)
    return [replacements.get(i, v) for i, v in enumerate(original)]


a = [1, 2, "hallo"]

b = copy_and_change(a, (1, "foo"), (2, "bar"))
print(b)


Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 16:20
von Septias
Jap das wars Danke :D ^^

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 18:00
von Sirius3
@Septias: eine Liste ist der falsche Datentyp, da eine Liste gleichartige Elemente enthält. Was Du suchst ist ein Tuple, das in Form eines NamedTuples genau die Funktion, die __deets__ Dir da so aufwändig geschrieben hat, schon mitbringt:

Code: Alles auswählen

from collections import namedtuple
Position = namedtuple("Position", "x,y,text")

p = Position(100, 200, "Hallo")
q = p._replace(y=100)

Re: List-Comprehensin

Verfasst: Samstag 25. Juni 2016, 18:56
von Septias
Noch besser ;D Danke :)