Seite 1 von 1
Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 17:31
von Nobuddy
Hallo zusammen
Stehe vor der Frage, ob das Ersetzen mit replace bzw. re.sub in einer List Comprehension möglich ist.
Das funktioniert:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
a = (['mein hund ist blau', ' hallo 123'],
['meine katze ist rot', 'oklahoma'],
['die ampel ist rot', 'oklahoma'])
data = set()
for r in a:
r[0] = r[0].replace('rot', 'grün')
data.add(tuple(r))
print(data)
Bisher scheitere ich das Gleiche in einer List Comprehension umzusetzen.
Code: Alles auswählen
data = set([tuple(r) for r in a r[0] = r[0].replace('rot', 'grün')])
Ist das möglich, oder generell nicht?
Wenn es möglich ist, wie bekomme ich dies umgesetzt?
Grüße Nobuddy
Re: Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 18:07
von Nobuddy
Evtl. bin ich selbst auf eine Lösung gekommen.
Code: Alles auswählen
data = set([tuple(r) for r in a if r[0] == r[0].replace('rot', 'grün')])
print(data)
Kann mir das jemand bestätigen und evtl. noch andere Lösungen posten?
Re: Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 18:22
von cofi
Ungetestet:
Code: Alles auswählen
data = set((x.replace('rot', 'grün'), y) for x, y in a)
Deine Loesung passt nur, wenn kein "rot" vorkommt, also nichts ersetzt wird.
Re: Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 18:29
von Sirius3
Nobuddy hat geschrieben:Kann mir das jemand bestätigen und evtl. noch andere Lösungen posten?
Das kannst Du doch selbst beantworten, ob bei beiden Deiner Lösungen das selbe Ergebnis rauskommt.
Re: Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 18:32
von Nobuddy
Hallo cofi
Hast Recht, meine Lösung funktioniert nicht.
Bei Deiner Lösung, die funktioniert

habe ich eine Frage.
Gehen wir mal davon aus, Listen mit mehr als nur 2 Spalten zu verwenden, z.B. 10 oder mehr Spalten.
Gibt es dafür auch eine Lösung, oder muß man dann die ganzen Spalten zuerst in der for-Schleife auflisten?
Re: Ersetzen in List Comprehension
Verfasst: Montag 14. Januar 2013, 19:47
von EyDu
Nobuddy hat geschrieben:Gehen wir mal davon aus, Listen mit mehr als nur 2 Spalten zu verwenden, z.B. 10 oder mehr Spalten.
Gibt es dafür auch eine Lösung, oder muß man dann die ganzen Spalten zuerst in der for-Schleife auflisten?
Auch die Frage kannst du dir selber beantworten, wenn du dir die Operationen auf Listen anschaust.
Re: Ersetzen in List Comprehension
Verfasst: Donnerstag 21. Februar 2013, 11:27
von Nobuddy
Hallo zusammen
Hoffe, Ihr könnt mir bei diesem helfen.
Code: Alles auswählen
line = set([(row, row[hersteller].replace(row[hersteller],
producerkey.get(row[hersteller])))
for row in self.List2 if not producer.get(row[hersteller])
if producerkey.get(row[hersteller])])
self.List2 ist eine TAB-getrennte Liste und besteht aus 31 Spalten.
Ich möchte nun aus dieser Liste, die Spalte row[hersteller] aktualisieren.
Mit obigem Konstrukt, bekomme ich ganz klar nur die Datensätze ausgegeben, die auf die if-Abfrage stimmen.
Weiter wird mit row der unveränderte Datensatz ausgegeben und die Änderung von row[hersteller] daran angefügt.
Wie bekomme ich es in der LC hin, daß alle Daten der Liste ausgegeben werden und die betreffenden Daten in row[hersteller] verändert werden?
Grüße Nobuddy
Re: Ersetzen in List Comprehension
Verfasst: Donnerstag 21. Februar 2013, 12:43
von BlackJack
@Nobuddy: Wenn ich Dich richtig verstanden habe willst Du etwas tun wofür LCs nicht da sind. Mit einer LC erstellt man eine neue Liste. Das ist kein Ersatz für eine ``for``-Schleife in der man bestehende Daten verändern möchte.
Re: Ersetzen in List Comprehension
Verfasst: Donnerstag 21. Februar 2013, 13:02
von Nobuddy
Hallo BlackJack
Danke für Deine Info, dann weiß ich, wie ich weiter vorgehe.
