2013-08-30 39 views
6

Ho bisogno di convertire un elenco di liste in un elenco di numeri interi.Converti un elenco di elenchi in un elenco di interi

da:

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

a:

L2 = [1234, 3717, 0567, 9456] 

Come posso fare pitone riconoscere un numero intero a partire da 0? Mi piace il caso L2[2]

L'altra domanda è, come posso controllare se gli articoli in un elenco sono ordinati?

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

Oltre a questo:

A == sorted(A) 

Voi ragazzi sono veloci. Grazie!

risposta

5

La prima domanda può essere fatto

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

Purtroppo, i numeri interi non iniziano con uno 0. Non v'è alcun modo per fare questo.

Controllare se A == sorted(A) è un modo perfetto per farlo.

+0

L'elenco L, contiene numeri interi non stringhe. Ho provato il tuo codice. Il tuo codice funzionerebbe per le stringhe, ma non continua a cancellare le virgole. – Ali

+0

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

+0

Nessuna necessità per le parentesi interne: '" ".join (str (y) per y in x) '. Inoltre, questo è un caso in cui 'map' sembra più naturale:' "" .join (map (str, x)) '. – FMc

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

Se si desidera una soluzione che non passa attraverso le stringhe.

1

Per la domanda 1, forse Python 3 convertiti, ma la pianura mi .join danno un TypeError in Python 2. Prova:

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

... per la rappresentazione di stringa, o

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

(La rappresentazione della stringa è l'unico modo per conservare gli zeri iniziali, tranne che per l'output formattato ... e quindi è solo una conversione di stringhe sulla strada del file/stringa di output.)

Per 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

Si potrebbe anche usare un elenco nel join in quanto sarà più veloce (2x sulla mia macchina). –

+0

Grazie per il suggerimento. Non l'ho mai programmato. Questo si applica alle sequenze più lunghe, o pensi che sia solo il sovraccarico di costruzione del generatore su un elenco di 4 elementi? –

+0

Potrebbe non essere valido per python 3. Ho scoperto che se lo si utilizza come elenco, è più veloce. Test su len (input) <= 100 milioni di list comprehensions mantengono un miglioramento della velocità 2x rispetto ai generatori. Non ero in grado di testare alcun più grande perché ci volle troppo tempo. Il cambio di contesto per i generatori è lento in Python 2. –

0

si può fare:

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

per mantenere gli zeri e ottenere:

[11234, 13717, 10567, 19456] 

ma allora avete bisogno di sbarazzarsi dei più a sinistra 1 s.

Problemi correlati