2013-10-24 15 views
23

Come faccio a fare qualcosa di simileModificare una stringa di numeri interi separati da spazi a una lista di int

x = '1 2 3 45 87 65 6 8' 

>>> foo(x) 
[1,2,3,45,87,65,6,8] 

Sono completamente bloccato, se lo faccio per indice, allora i numeri con più di 1 cifra sarà suddiviso. Aiuto per favore.

+1

A downvoters: Penso che questa domanda è piuttosto bene. Anche se non ha mostrato il codice, mostra il suo sforzo: "Sono completamente bloccato, se lo faccio per indice, quindi i numeri con più di 1 cifra saranno suddivisi" – aIKid

+0

Sì, sono d'accordo alKid, beh previene lui dal fare più domande che sto affrontando ora. perché alcune persone hanno il privilegio di downvotare non vuol dire minimizzare ogni cosa. –

+0

Ho appena dato un'occhiata al tuo profilo haha. Se vuoi fare di nuovo una domanda, puoi creare un nuovo profilo o aumentare la tua reputazione. Anch'io sono stato in quella situazione. – aIKid

risposta

26

È possibile utilizzare un elenco di comprensione, in combinazione con il metodo .split():

x = [int(i) for i in x.split()] 

In alternativa è possibile utilizzare map aswell:

x = map(int, x.split()) 

Questo creerà un list di int 's se si desidera interi.

o semplicemente usare .split() per una lista di stringhe:

x = x.split() 

Se si desidera creare un elenco di str

+0

+1 per la conversione di un int –

+0

per le stringhe si solo bisogno 'x = x.split()' –

0

Giusto per fare una spiegazione chiara.

È possibile utilizzare il metodo stringa str.split() che suddivide la stringa in un elenco. È possibile ottenere ulteriori informazioni su questo metodo here.

Esempio:

def foo(x): 
    x = x.split() #x is now ['1','2','3','45', ..] the spaces are removed. 
    for i, v in enumerate(x): #Loop through the list 
     x[i] = int(v) #convert each element of v to an integer 

Che dovrebbe farlo!

>>> x 
[1, 2, 3, 45, 87, 65, 6, 8] 
+0

non è così che funziona 'enumerate' ... restituisce l'indice e il valore dell'indice dato come una tupla. Questo codice fallirà * * * int (i) 'e' x.index (i) '. – SethMMorton

+0

@SethMMorton Terribilmente dispiaciuto per quello. Aggiornato la mia risposta. – aIKid

+0

Il mio codice era incompleto, l'ho dimenticato e inviato. Scusate. – aIKid

1

Una linea semplice può essere ...

print (map(int, x.split())) 

Come qualcuno saggiamente mi ha corretto, in Python> = 3, esso diventa,

print(list(map(int,x.split()))) 

Può anche essere utente nelle versioni precedenti.

+5

Si noti che in python3, 'map' restituisce un * oggetto mappa *, quindi sarà necessario richiamare' list' su di esso per trasformarlo in un elenco. – SethMMorton

+0

Grazie a SethMMorton, non ne ero a conoscenza :) –

2

Non c'è bisogno di preoccuparsi, perché python fornisce la funzione split() per cambiare stringa in una lista.

x='1 2 3 4 67 8 9' 
x.split() 

[ '1', '2', '3', '4', '67', '8']

o se si vuole di uscita in forma di numero intero allora si può usare la mappa funzione

map(int ,x.split(' ')) 

[1, 2, 3, 4, 67, 8]

2

s=' 1 2 3 4 67 8 9 '
se c'è uno spazio all'inizio o alla fine della stringa o spazio multiplo tra gli elementi di cui sopra, la funzione:
out = [item for item in s.split(' ')]
tornerà elementi vuoti:
['', '1', '2', '', '3', '4', '67', '8', '9', '']
È possibile filtrare fuori:
out = [item for item in filter(None, s.split(' '))]
uscita diventa:
['1', '2', '3', '4', '67', '8', '9']
il filtro con nessun come primo arg rimuove elementi vuoti.

+0

Sì, ma .. A cosa serve la mappa se si sta già iterando? È lo stesso senza 'map':' [int (i) per i in filter (None, s.split (''))] 'o senza la list comprehension:' map (int, filter (None, s.split (''))) ' – Mikaelblomkvistsson

0

Supponendo di avere solo cifre nel vostro ingresso, si può avere qualcosa di simile a seguente:

>>> x = '1 2 3 45 87 65 6 8' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1 2 3 45 87 65 6 8] 

Questo si prenderà cura del caso in cui le cifre sono separate da più di un carattere di spazio o quando ci sono lo spazio caratteri davanti o dietro all'input. Qualcosa come segue:

>>> x = ' 1 2 3 4 ' 
>>> num_x = map(int, filter(None, x.split(' '))) 
>>> num_x 
[1, 2, 3, 4] 

si può sostituire input per x.split(' ') per abbinare altri tipi di delimitatori come pure per esempio , o ; ecc

Problemi correlati