2013-08-30 11 views
6

Ich muss eine Liste von Listen in eine Liste von Ganzzahlen konvertieren.Liste der Listen in Liste der Ganzzahlen umwandeln

aus:

L1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]] 

zu:

L2 = [1234, 3717, 0567, 9456] 

Wie kann ich Python eine ganze Zahl beginnend mit 0 erkennen? Wie der Fall L2[2]

Die andere Frage ist, wie kann ich überprüfen, ob Elemente in einer Liste bestellt sind?

A = [1, 2, 6, 9] ---->True 

Andere als diese:

A == sorted(A) 

Ihr Jungs sind schnell. Vielen Dank!

Antwort

5

Die erste Frage kann leider durch

L = [int("".join([str(y) for y in x])) for x in L] 

getan werden, beginnen nicht ganze Zahlen mit einem 0. Es gibt keine Möglichkeit, dies zu tun.

Überprüfen, ob A == sorted(A) eine vollkommen gute Möglichkeit ist, dies zu tun.

+0

Die Liste L, enthält Ganzzahlen nicht Zeichenketten. Ich habe deinen Code ausprobiert. Ihr Code würde für Strings funktionieren, aber die Kommas werden nicht weggelassen. – Ali

+0

>>> L1 = [[1, 2, 3, 4], [3, 7, 1, 7], [0, 5, 6, 7], [9, 4, 5, 6]] >> > [int ("". join ([str (y) für y in x])) für x in L1] [1234, 3717, 567, 9456] –

+0

Keine Notwendigkeit für die inneren Klammern: '" ".join (str (y) für y in x) '. Dies ist auch ein Fall, in dem "map" wie eine natürlichere Anpassung erscheint: '" ".join (map (str, x))'. – FMc

4
L2 = [reduce(lambda x,y : 10 * x + y, l) for l in L1] 

Wenn Sie eine Lösung möchten, die nicht durch Strings geht.

1

Zu Frage 1, vielleicht Python 3 konvertiert, aber die Ebene .join geben Sie mir eine Typeerror in Python 2. Versuch:

["".join(str(d) for d in x) for x in L] 

... für die String-Darstellung oder

[int("".join(str(d) for d in x)) for x in L] 

(Die Zeichenfolgendarstellung ist die einzige Möglichkeit, führende Nullen beizubehalten, außer bei formatierter Ausgabe ... und dann ist das nur eine Stringkonvertierung auf dem Weg zur Ausgabedatei/string.)

Für questio n 2: all(A[i-1] < A[i] for i in range(1, len(A)))

>>> A = [1, 2, 6, 9] 
>>> all(A[i-1] < A[i] for i in range(1, len(A))) 
True 
+1

Sie können auch eine Liste im Join verwenden, da diese schneller ist (2x auf meinem Rechner). –

+0

Danke für den Tipp. Das habe ich nie geplant. Gilt das für längere Sequenzen, oder denken Sie, dass nur der Generatorenaufbau auf einer 4-Element-Liste liegt? –

+0

Es kann nicht für Python 3 gelten. Ich habe festgestellt, dass es schneller ist, wenn Sie es als Liste verwenden. Das Testen auf len (Eingaben) <= 100 Millionen Listenerfassungen behält eine 2-fache Verbesserung gegenüber Generatoren bei. Ich konnte keine größeren Tests durchführen, weil es zu lange dauerte. Die Kontextumschaltung für Generatoren ist in Python 2 langsam. –

0

können Sie tun:

L2 = [ int("1" + "".join(str(l) for l in ll1)) for ll1 in L1 ] 

die null zu halten und erhalten:

[11234, 13717, 10567, 19456] 

aber dann müssen Sie die am weitesten links stehenden 1 s loszuwerden.