Um die Übersicht zu verbessern, mach ich mal nen neuen Thread auf.
Aufgrund der Anregungen aus den anderen beiden Threads habe ich nun begonnen, mir was über iterieren und Schleifen durchzulesen um mein Programm von den Schleifenungetümen zu befreien.
Doch bei einem Fall habe ich Probleme:
Liste a enthält sehr viele Zahlen in dem Format:
a=[[1,2,7,8],[3,4,7,9],[8,3,2,2]....]
Liste b enthält Buchstaben:
b=['a','b','c','d','e','f','g','h',...]
Die Zahlen in a sollen nun durch Buchstaben aus b nach folgendem Muster ersetzen werden:
0>a
1>b
2>c
3>d
...
Die Zahlenliste a soll aber erhalten bleiben.
Dies hatte ich so gelöst:
Code: Alles auswählen
a1=list(a)
for i in range(len(a1)):
for j in range(len(a1[i])):
a2=list(a1[i])
a2[j]=b[a2[j]]
a1[i]=a2
Code: Alles auswählen
a1=list(a)
for i in a1:
for j,k in enumerate(i):
i[j]=b[k]
Dies hatte ich im alten Programm durch a2=list(a1) verhindert.
Ich habe es dann mit deepcopy probiert:
Code: Alles auswählen
a1=copy.deepcopy(a)
for i in a1:
for j,k in enumerate(i):
i[j]=b[k]
Doch dauert das "deepcopy" zu lange. Ich optimiere mein Programm ja gerade dazu, um es schneller zu machen.
Der alte und der neue Abschnitt sind nun wegen des "deepcopy"s aber wieder fast gleich langsam.
Ich habe mir mal die Laufzeitveränderung angeschaut:
Code: Alles auswählen
a=[[1,1,2],[1,2,2]]
for i in range(100000):
Zeile x
"b=list(a)"
Laufzeit:0,08 s
mit Zeile x gleich
"b=copy.copy(a)"
Laufzeit:0,27 s
mit Zeile x gleich
"b=copy.deepcopy(a)"
Laufzeit:2,45 s
Hat jemand eine Lösung für mein Problem?
Ich bräuchte entweder eine schnellere Kopier-Methode oder eine Möglichkeit, die Listenelemente zu ersetzen, ohne dass das Problem auftritt oder eine andere Lösung

Gruß
Paul