Die Suche ergab 6 Treffer

von novoid
Donnerstag 17. Dezember 2009, 18:53
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447

Hmm .. ich hab einen Fehler, momentan macht er genau das andere ;) Gleich mal fixen.


Bei mir kommt auch:
TypeError: valid() takes exactly 2 arguments (1 given)
in der filter-Zeile. Das ist Zeile 11 vom Posting von 17.52.


Um die Iteration kommt man nicht herum, hier ist sie allerdings nicht ...
von novoid
Donnerstag 17. Dezember 2009, 18:07
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447



from functools import partial
def valid(alarm, row):
str(alarm['description']) == row['description'] and \
str(alarm['begin']) == row['begin'] and \
str(alarm['end']) == row['end'] and \
str(alarm['alarm']) == row['alarm']

for row in csvReader:
valid = partial(valid, row=row)
alarms ...
von novoid
Donnerstag 17. Dezember 2009, 17:44
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447

Um mal `filter` einzuwerfen
filter(lambda x: x >= 42, range(100))

OK. I see.

Sorry, ich bin leider zu unerfahren, um diesen Filter (den ich im Minimalbeispiel durchaus verstehe) auf das reale Beispiel mit den zwei Listen von dicts zu übertragen (siehe weiter oben mit "alarms" und "csvalarms ...
von novoid
Donnerstag 17. Dezember 2009, 16:58
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447

Einfach eine Kopie der Liste erzeugen

Dachte ich mir auch:


liste_neu = liste_alt
for element in liste_alt:
if element.eigenschaft = BEDINGUNG:
liste_neu.remove(element)


Da kommt leider auch der selbe Blödsinn heraus, da Python offenbar in Zeile 2 nur eine Referenz erzeugt. Im Falle einer ...
von novoid
Donnerstag 17. Dezember 2009, 16:40
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447

Hallo!

Am einfachsten ist es, wenn du eine neue Liste erzeugst, welche alle gewünschten Elemente enhält.

OK. Das kann ich so machen:


csvalarms = []
for row in csvReader:
csvalarms.append({'description':row['description'], \
'begin':row['begin'], 'end':row['end'],'alarm':row['alarm ...
von novoid
Donnerstag 17. Dezember 2009, 16:17
Forum: Allgemeine Fragen
Thema: Iterierte Liste manipulieren
Antworten: 12
Zugriffe: 1447

Iterierte Liste manipulieren

Hi!

Ich habe bemerkt, dass wenn ich über eine Liste iteriere und in der Schleife einzelne Elemente per remove() rauslösche, Blödsinn rauskommt.

Vereinfacht sowas wie:


for element in liste:
if element < 42:
liste.remove(element)


Offensichtlich nimmt es mir Python übel, wenn man die Liste ...