Seite 1 von 1

Python 3.8 Listenvergleich beschleunigen

Verfasst: Donnerstag 27. Januar 2022, 13:55
von notapro
Hallo zusammen,
zuallererst sei erwähnt, ich bin kein Python-Profi. :D
Daher bräuchte ich eure Hilfe.

Ich habe zwei Listen von anderen Abfragen/Erzeugung.
Jetzt möchte ich nur die kompletten Strings aus "str_sql_tmp" rausfiltern, welche in teilen mit "fk_exists" übereinstimmen.
Ich habe folgendes gemacht:

Code: Alles auswählen

str_sql_tmp = [ "('R0001e5e7','C000219c0',st_geometryfromtext('POLYGON((1.0 2.0,2.0 2.0,2.0 1.0,1.0 1.0,1.0 2.0))'))",
		"('R0001e5e8','C000219c6',st_geometryfromtext('POLYGON((2.0 3.0,3.0 3.0,3.0 2.0,2.0 2.0,2.0 3.0))'))",
		"('R0001e5e9','C000219c2',st_geometryfromtext('POLYGON((3.0 4.0,4.0 4.0,4.0 3.0,3.0 3.0,3.0 4.0))'))"]
### normaly over 600.000 entries

fk_exists = ['R0001e5e7/C000219c0', 'R0001e5e9/C000219c2']
### normaly over 250.000 entries

str_sql = []
for x in str_sql_tmp:
    if x[2:23].replace("','", "/") in fk_exists:
        str_sql.append(x)
        
Das funktioniert so wie ich es möchte.
Allerdings enthalten die Listen rund 250.000 und rund 600.000 Einträge, wodurch der Vergleich sehr lange läuft.
Gibt es eine Möglichkeit, dies zu beschleunigen?

Re: Python 3.8 Listenvergleich beschleunigen

Verfasst: Donnerstag 27. Januar 2022, 14:59
von Sirius3
Wer erzeugt denn die Daten auf diese Weise? Gibt es da keine Möglichkeit, die sinnvoller zu speichern?
Das benutzen von fixen Indizes ist nicht sehr robust. Da würde man eigentlich einen Parser für das Format schreiben.

Die Variablennamen sind nicht sehr gut. str_sql_tmp wäre wohl input_sql_values und str_sql result_sql_values.
`x` für einen Satz an Werten ist erst schlecht.

Was bedeutet für dich "sehr lang"? Bei mir sind 600000 Einträge in 200ms durch.

Re: Python 3.8 Listenvergleich beschleunigen

Verfasst: Donnerstag 27. Januar 2022, 15:04
von ThomasL
mach mal aus der fk_exists ein Set

Code: Alles auswählen

fk_exists = set(fk_exists)

Re: Python 3.8 Listenvergleich beschleunigen

Verfasst: Donnerstag 27. Januar 2022, 15:19
von pillmuncher
Sirius3 hat geschrieben: Donnerstag 27. Januar 2022, 14:59 Wer erzeugt denn die Daten auf diese Weise? Gibt es da keine Möglichkeit, die sinnvoller zu speichern?
Meine Vermutung ist ja, dass da für eine GIS-Datenbank INSERT-Statements mit Strings zusammengebastelt und in einem Zwischenschritt gefiltert werden sollen. So würde man das natürlich nicht machen, aber um einen besseren Vorschlag machen zu können, bräuchte man etwas mehr Code/Hintergrunduinformationen.