Ich habe eine Liste von Tupeln:
(1,2,3), (2,3,1) ...
Ich möchte dies in eine Liste von ganzen Zahlen ändern:
"123, 231 ..."
Wie kann ich das machen? Danke im Voraus.
Antworten:
4 für die Antwort № 1Ein funktionaler Ansatz:
[reduce(lambda a, x: a * 10 + x, t) for t in tuples]
bearbeiten:
Nur zum Spaß ein kleiner Maßstab gegen JBernardos Antwort:
In [21]: %timeit [int("".join(str(i) for i in t)) for t in tuples]
100000 loops, best of 3: 7.54 us per loop
In [22]: %timeit [reduce(lambda a, x: a * 10 + x, t) for t in tuples]
1000000 loops, best of 3: 1.55 us per loop
Edit 2:
Akavall wies darauf hin, dass meine ursprüngliche Antwort nur funktioniert, wenn die Tupel ausschließlich einstellige Zahlen haben.
Wenn dies für Ihren Anwendungsfall nicht akzeptabel ist, ist die Antwort von JBernardo wahrscheinlich eine einfachere Möglichkeit, dies zu tun. Aber nur zum Spaß:
[reduce(lambda a, x: a * 10**(len(str(x))) + x, t) for t in tuples]
oder ganz ohne String-Konvertierungen:
from math import log10
[reduce(lambda a, x: a * 10**(int(log10(x))+1) + x, t) for t in tuples]
2 für die Antwort № 2
wie wäre es mit:
[int("".join(str(i) for i in t)) for t in tuples]
1 für die Antwort № 3
Weniger komplex als bei @Luke
[sum(x * 10**i for i, x in enumerate(t[1][::-1])) for t in tuples]
Es summiert sich wie x1 + x2 * 10 ^ 2 + ... + xN * 10 ^ n
[::-1]
- Um das Tupel umzukehren, aufzählen, um (xN, N) Paare zu erhalten.