2013-08-30 11 views
6

Potrzebuję przekształcić listę list w listę liczb całkowitych.Konwertuj listę list na listę liczb całkowitych

od:

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

do:

L2 = [1234, 3717, 0567, 9456] 

Jak mogę uczynić python rozpoznać całkowitą 0 rozpoczynający się? Podobnie jak w przypadku: L2[2]

Drugie pytanie brzmi: jak mogę sprawdzić, czy pozycje na liście są zamówione?

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

Inne niż to:

A == sorted(A) 

Jesteście szybko. Dzięki!

Odpowiedz

5

Pierwsze pytanie może być wykonana przez

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

Niestety całkowitymi nie zaczynają się od 0. Nie ma sposobu, aby to zrobić.

Sprawdzanie, czy A == sorted(A) jest doskonałym sposobem na zrobienie tego.

+0

Lista L zawiera liczby całkowite, a nie ciągi. Wypróbowałem twój kod. Twój kod będzie działał dla ciągów, ale nadal nie pomija przecinków. – Ali

+0

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

+0

Nie ma potrzeby stosowania nawiasów wewnętrznych: '" ".join (str (y) dla y w x) '. Ponadto jest to przypadek, w którym 'map' wydaje się bardziej naturalne dopasowanie:' "" .join (map (str, x)) '. – FMc

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

Jeśli chcesz rozwiązanie, które nie przechodzi przez ciągi.

1

Na pytanie 1, może Python 3 nawróconych, ale zwykły .join dać mi TypeError w Pythonie 2. Spróbuj:

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

... na ciąg znaków lub

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

(Reprezentacja łańcuchów jest jedynym sposobem na zachowanie początkowych zer, z wyjątkiem sformatowanych danych wyjściowych ... a następnie jest to tylko konwersja ciągu w drodze do pliku/ciągu wyjściowego).

Do zapytania 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

Równie dobrze możesz użyć listy w złączeniu, ponieważ będzie to szybsze (2x na moim komputerze). –

+0

Dzięki za cynk. Nigdy tego nie uzgodniłem. Czy dotyczy to dłuższych sekwencji, czy też myślisz, że jest to tylko obciążenie generatora generatora na liście 4-elementowej? –

+0

Może nie mieć zastosowania do pythona 3. Zauważyłem, że jeśli używasz go jako listy, jest to szybsze. Testowanie na len (dane wejściowe) <= 100 milionów sprawdzeń na liście utrzymuje 2x poprawę szybkości w stosunku do generatorów. Nie mogłem przetestować żadnego większego, ponieważ trwało to długo. Przełączanie kontekstu dla generatorów jest wolne w Pythonie 2. –

0

można zrobić:

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

zachować zera i otrzymujemy:

[11234, 13717, 10567, 19456] 

ale wtedy trzeba się pozbyć skrajnej lewej 1 s.

Powiązane problemy