Gegeben:
- eine Liste mit Inhalt mehrerer anderer Listen, also eine list of lists
eine liste von dictonarys, welche wiederum eine Liste enthalten
- Die Listen aus dem Dictonary sollen zulässige Zahlenwerte darstellen. Alle anderen Zahlenwerte, welche in der Liste mit Listen erscheinen, sollen daraus entfernt werden, und jeweils als temporär bereinigte Kopie der Liste ausgegeben werden.
- Das erste Durchsuchen, Bereinigen und Ausgeben der Listenkopie funktioniert. Beim zweiten Durchgang jedoch scheint der Code nicht mehr eine Kopie der Ausgangsliste zu erzeugen, sondern greift auf die Liste aus dem vorherigen Durchlauf zurück
Code: Alles auswählen
#!/usr/bin/python
check = [{"numbers":[2,3]},{"numbers":[2,5]}]
listoflists = [[1,2,3,4,5],
[2,3,4,5,6],
[3,4,5,6,7],
[4,5,6,7,8],
[5,6,7,8,9]]
# listoflists sollte in meinem Beispiel eigentlich 2 mal durchlaufen werden.
# Einmal sollten alle Zahlen ungleich 2 und 3 entfernt werden, die bereinigte
# Kopie ausgegeben werden, und danach ein zweiter Durchlauf gestartet werden,
# welcher alle Zahlen ungleich 2 und 5 entfernt.
for i in check:
tmplistoflists = listoflists[:]
for tmplist in tmplistoflists:
removelist = []
for number in tmplist:
if number not in i['numbers']:
removelist.append(number)
for number in removelist:
tmplist.remove(number)
print "tl: ",tmplist
print "check next"
Auf den Gedanken, die zu löschenden Elemente nicht gleich zu entfernen, bin ich auch erst gekommen, als ich merkte, dass Python dann offensichtlich Probleme mit dem Konstrukt "for i in list" hat, wenn während dieser Schleife aus list gelöscht wird.
Für jede Erklärung dankbar
Gruß weasel