List-Comprehensin

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
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

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 ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

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 ?
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Benutzeravatar
snafu
User
Beiträge: 6741
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
__deets__
User
Beiträge: 14543
Registriert: Mittwoch 14. Oktober 2015, 14:29

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)

Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Jap das wars Danke :D ^^
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

@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)
Septias
User
Beiträge: 80
Registriert: Freitag 24. Juni 2016, 19:15

Noch besser ;D Danke :)
Für alle meine Codebeispiele gilt: Äußert bitte jegliche Art von Verbesserungsvorschlägen. Ich versuche immer meinen Stil zu verbessern und wenn man mir einfach sagt, was ich falsch machen, ist es um einiges einfacher, als wenn ich es mühselig selber herausfinden muss :-)
Antworten