Wenn haben Sie eine Liste wie folgt:schnelle Art und Weise der Überquerung Strings in einer Liste
shops=['A','B','C','D']
Und möchte folgende neue Listen erstellen (I überqueren jedes Element mit jedem anderen und einen String erstellen, in dem ersten Teil ist alphanummerisch vor dem zweiten):
['A-B', 'A-C', 'A-D']
['A-B', 'B-C', 'B-D']
['A-C', 'B-C', 'C-D']
['A-D', 'B-D', 'C-D']
ich so etwas wie dieses:
for a in shops:
cons = []
for b in shops:
if a!=b:
con = [a,b]
con = sorted(con, key=lambda x: float(x))
cons.append(con[0]+'-'+con[1])
print(cons)
dies ist jedoch pr langsam für große Listen (z.B. 1000, wo ich 1000 * 999 * 0,5 Ausgänge habe). Ich suchte nach einer effizienteren Methode, dies zu tun?
Ich hätte eine if-else-Klausel für die Sortierung, z.
for a in shops:
cons = []
for b in shops:
if a<b:
cons.append(a+"-"+b)
elif a>b:
cons.append(b+"-"+a)
print(cons)
Which, habe ich noch nicht abgelaufen - aber ich die Haupt dachte Verlangsamung der Doppel for-Schleife
Warum nicht '('A_B', 'A_C', 'B_C')'? – Kasramvd
'key = Lambda x: float (x)' ist das gleiche - nur langsamer - als 'key = float' –
Ich kann nicht die allgemeine Komplexität dieser Algorithmen, wie Sie alle generieren müssen diese Kombinationen. Sie können nur Mikro-Tuning durchführen (indem Sie keine unnötigen Lambdas definieren). Aber: Wofür brauchen Sie diese Kombinationen überhaupt? Vielleicht gibt es einen besseren Weg, z.B. nur die Kombinationen generieren, oder ohne die Sortierung. –