Articolo originale: Python String to Array – How to Convert Text to a List

Ci saranno volte in cui avrai bisogno di convertire un tipo di dato in un altro.

Non temere, poiché  Python offre diversi modi per svolgere questa operazione.

In questo articolo, vedremo alcuni dei modi per convertire una stringa in una lista.

Tratteremo i seguenti argomenti:

  1. Una panoramica su stringhe e liste
    1. Come verificare il tipo di dato di un oggetto
  2. Convertire una stringa in una lista di singoli caratteri
  3. Convertire una stringa in una lista di parole
    1. Analisi della sintassi del metodo split()
    2. Utilizzare split() con un separatore
    3. Utilizzare split() con il parametro maxsplit
  4. Convertire una stringa di numeri in una lista di numeri

Cosa sono le stringhe e le liste in Python?

Una stringa è una sequenza ordinata di caratteri. È una serie di caratteri, in cui un carattere segue l'altro.

Una stringa è racchiusa tra virgolette singole o doppie:

# le seguenti sono tutte stringhe

# una stringa compresa tra virgolette singole
first_name = 'John'

# una stringa compresa tra virgolette doppie
last_name = "Doe"

Se desideri creare una stringa che si estende su più righe - una cosiddetta stringa multiriga - devi racchiuderla utilizzando le virgolette triple:

# una stringa multiriga compresa tra virgolette triple

phrase = '''Sto studiando Python
e mi piace molto imparare questo linguaggio!
'''

Le stringhe sono immutabili. Questo significa che una volta create, non possono essere modificate. I singoli caratteri che costituiscono una stringa non possono essere alterati.

Per esempio, se cercassi di cambiare la prima lettera di una parola da minuscola a maiuscola, otterresti un errore:

# prova a cambiare 'p' minuscola in 'P' maiuscola
fave_language = "python"
fave_language[0] = "P"

print(fave_language)

# il risultato sarà un messaggio di errore
#fave_language[0] = "P"
#TypeError: 'str' object does not support item assignment

Tuttavia, puoi riassegnare una stringa diversa aggiornando la variabile in questo modo:

fave_language = "python"
fave_language = "Python"

print(fave_language)

#risultato
#Python

Una lista è una collezione ordinata di dati.

Più elementi (in genere correlati) sono memorizzati insieme nella stessa variabile.

È possibile creare una lista racchiudendo zero o più elementi tra parentesi quadre, [], ognuno separato da una virgola.

Una lista può contenere qualsiasi tipo di dato integrato in Python.

# una lista di numeri
my_numbers_list = [10,20,30,40,50]

print(my_numbers_list)

# risultato
# [10, 20, 30, 40, 50]

Le liste sono mutabili.

Puoi modificare gli elementi di una lista dopo che è stata creata. Ciò significa che puoi modificare gli elementi esistenti, aggiungerne di nuovi o eliminarli in qualsiasi momento durante la vita del programma.

programming_languages = ["Javascript", "Python", "Java"]

#cambia il primo elemento della lista
programming_languages[0] = "JavaScript"

print(programming_languages)

#risultato
#['JavaScript', 'Python', 'Java']

Come determinare il tipo di dato di un oggetto in Python

Per trovare il tipo di dato di un oggetto in Python, puoi utilizzare la funzione incorporata type(), che ha la seguente sintassi:

type(object)

#object è l'oggetto di cui devi trovare il tipo di dato

La funzione type() restituisce il tipo dell'oggetto passato come argomento alla funzione.

Questa funzione è di solito utilizzata per il debug.

Vediamo come usare la funzione type() con stringhe e liste nel prossimo esempio:

my_name = "John Doe"
my_lucky_numbers = [7,14,33]

print(type(my_name))
print(type(my_lucky_numbers))

#risultato
#<class 'str'>
#<class 'list'>

Come convertire una stringa in una lista di singoli caratteri

Puoi prendere una parola e trasformarla in una lista.

Ogni singolo carattere che compone la parola diventa un elemento individuale e separato all'interno della lista.

Per esempio, prendiamo la parola "Python".

Puoi convertirla in una lista di caratteri, dove ogni elemento della lista corrisponde ad uno dei caratteri che costituisce la stringa "Python".

Ciò significa che il carattere P sarebbe un elemento della lista, il carattere  y sarebbe un altro elemento della lista, il carattere t sarebbe un ulteriore elemento e così via.

Il modo più semplice consiste nel trasformare la stringa in una lista, metodo noto come typecasting (conversione di tipo).

Il typecasting permette di convertire direttamente un tipo di dato in un altro – in questo caso dal tipo di dato denominato 'stringa' al tipo di dato chiamato 'lista'.

Puoi fare ciò utilizzando la funzione incorporata list(), passando la stringa data come argomento della funzione.

programming_language = "Python"

programming_language_list = list(programming_language)

print(programming_language_list)

#risultato
#['P', 'y', 't', 'h', 'o', 'n']

Vediamo un altro esempio:

current_routine = " Learning Python ! "

current_routine_list = list(current_routine)

print(current_routine_list)

#risultato
#[' ', 'L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', '!', ' ']

Il testo " Learning Python ! " ha spazi vuoti sia all'inizio che alla fine (tra le doppie virgolette e Learning, tra il punto esclamativo e le doppie virgolette), spazi vuoti tra le parole "Learning" e "Python" e spazi vuoti tra la parola "Python" e il punto esclamativo.

Quando la stringa viene convertita in una lista di caratteri, ogni spazio vuoto viene trattato come un singolo carattere ed è per questo che si vedono gli spazi vuoti tra virgolette singole ( ' ') come elementi della lista.

Per rimuovere gli spazi vuoti solo dall'inizio e dalla fine della stringa, puoi utilizzare il metodo strip() .

current_routine = " Learning Python ! "

#gli spazi vuoti all'inizio e alla fine non saranno più elementi facenti parte della lista 

current_routine_list = list(current_routine.strip())

print(current_routine_list)

#risultato
#['L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', ' ', 'P', 'y', 't', 'h', 'o', 'n', ' ', '!']

Per rimuovere tutti gli spazi vuoti, e non solo quelli iniziali e finali, e fare in modo che nessun carattere di spazio vuoto sia compreso nella nuova lista, puoi utilizzare invece il metodo replace():

current_routine = " Learning Python ! "

#sostituisce ogni spazio vuoto con nessuno spazio
current_routine_list = list(current_routine.replace(" ", ""))

print(current_routine_list)

#risultato
#['L', 'e', 'a', 'r', 'n', 'i', 'n', 'g', 'P', 'y', 't', 'h', 'o', 'n', '!']

Come convertire una stringa in una lista di parole

Il metodo split() è un altro modo per convertire una stringa in una lista.

Il metodo split() divide una stringa in una lista, dove ogni elemento della lista corrisponde ad una rispettiva parola che compone la stringa.

Ogni parola sarà un singolo elemento della lista.

Analisi del metodo split() in Python

La sintassi generale del metodo split() è la seguente:

string.split(separator=None, maxsplit=-1)

Vediamo come è strutturata:

  • string è la stringa che si vuole trasformare in una lista.
  • Il metodo split() trasforma una stringa in una lista. Accetta due parametri opzionali.
  • separator è il primo parametro opzionale e definisce il punto in cui la stringa sarà divisa. Per impostazione predefinita, il separatore è uno spazio vuoto e la stringa verrà divisa ovunque ci sia uno spazio vuoto.
  • maxsplit è il secondo parametro opzionale. Specifica il numero massimo di divisioni da eseguire. Il valore predefinito, -1, significa che la stringa viene suddivisa in tutta la sua lunghezza e non ci sono limiti alla suddivisione.

Vediamo un esempio di come funziona.

phrase = "I am learning Python !"

print(type(phrase))

#risultato
#<class 'str'>

Nella stringa sopra, ogni parola che la compone è separata da uno spazio vuoto.

Puoi utilizzare il metodo split() per trasformare questa stringa in una lista di parole.

Non è necessario che specifichi un separatore o un parametro maxsplit, poiché vogliamo separare tutte le parole ovunque ci siano spazi vuoti tra di esse.

phrase = "I am learning Python !"

phrase_to_list = phrase.split()

print(phrase_to_list)
print(type(phrase_to_list))


#risultato
#['I', 'am', 'learning', 'Python', '!']
#<class 'list'>

La stringa è stata suddivisa in base a dove c'erano spazi vuoti e ogni parola che la costituiva è stata trasformata in un singolo elemento della lista.

Come utilizzare il metodo split() con un separatore

Puoi anche convertire una stringa in una lista utilizzando un separatore con il metodo split(). Il separatore può essere un qualsiasi carattere da te scelto.

La stringa verrà divisa in base al separatore da te dato.

Ad esempio, puoi usare una virgola, ,, come separatore.

La stringa si trasformerà in una lista ogni volta che c'è una virgola, partendo da sinistra.

Gli elementi separati da una virgola saranno i singoli elementi della lista.

Prendiamo la stringa seguente:

phrase = "Hello world,I am learning Python!"

Una virgola separa Hello world da I am learning Python!.

Se desideriamo usare la virgola come separatore per creare due singoli elementi della lista, procederemo come segue:

phrase = "Hello world,I am learning Python!"

phrase_to_list = phrase.split(",")

print(phrase_to_list)

#risultato
#['Hello world', 'I am learning Python!']

Due elementi separati sono stati creati come elementi della lista e la divisione è avvenuta dove c'era la virgola.

Un altro esempio potrebbe essere quello di separare un nome di dominio, ogni volta che c'è un punto, ..

domain_name = "www.freecodecamp.org"

domain_name_list = domain_name.split(".")

print(domain_name_list)

#risultato
#['www', 'freecodecamp', 'org']

Ogni volta che c'è un punto, un nuovo elemento sarà aggiunto alla lista.

Come usare il metodo split() con il parametro maxsplit

Come menzionato in precedenza, maxsplit è un parametro opzionale del metodo split().

Definisce quanti elementi della lista verranno divisi e trasformati in singoli elementi della lista. Di default, il parametro maxsplit è impostato a -1. Ciò significa che tutti gli elementi che compongono la stringa saranno divisi.

Ma possiamo cambiare il valore con un numero specifico.

Per dividere la stringa soltanto due volte, modifichiamo maxsplit a 2:

current_routine = "I enjoy learning Python everyday"

current_routine_list = current_routine.split(maxsplit=2)

print(current_routine_list)

#risultato
#['I', 'enjoy', 'learning Python everyday']

maxsplit è impostato a 2, il che significa che massimo due parole saranno divise da uno spazio e costituiranno due singoli elementi della lista. Il terzo elemento della lista sarà costituito dal resto delle parole che compongono la stringa iniziale.

Utilizzando un altro esempio della sezione precedente, puoi combinare un separatore con maxsplit per eseguire una conversione mirata di una stringa in un elenco:

domain_name = "www.freecodecamp.org"

domain_name_list = domain_name.split(".", maxsplit=1)

print(domain_name_list)

#risultato
#['www', 'freecodecamp.org']

In questo esempio, il separatore era un punto e solo il primo elemento è stato separato.

Come convertire una stringa di numeri interi in una lista di numeri interi

I numeri sono considerati stringhe quando sono racchiusi tra virgolette singole o doppie.

Supponiamo che la tua data di nascita sia memorizzata come una stringa, come di seguito:

birthdate = "19/10/1993"

print(type(birthdate))

#risultato
#<class 'str'>

Per rimuovere le barre e memorizzare i numeri associati alla data, al mese e all'anno di nascita come elementi separati della lista, puoi procedere così:

birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

print(birthdate_list)
print(type(birthdate_list))

#risultato
#['19', '10', '1993']
#<class 'list'>

Nell'esempio qui sopra il separatore era la barra, /, e un nuovo elemento della lista è stato creato in ogni punto in cui c'era una barra.

Se osservi attentamente il risultato, vedrai che gli elementi della lista sono ancora stringhe: sono racchiusi da virgolette singole e non è stata effettuata alcuna conversione di tipo.

Per convertire ogni elemento della lista da una stringa a un numero intero, puoi usare la funzione map.

La funzione map prende due argomenti:

  • Una funzione. In questo caso la funzione sarà la funzione int.
  • Un iterabile, ovvero una sequenza o una collezione di elementi. In questo caso, l'iterabile è la lista da noi creata.
birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

str_to_int = (map(int, birthdate_list))

print(str_to_int)

#risultato
#<map object at 0x10e289960>

Questo non è esattamente il risultato che volevamo. Quando controlliamo il tipo di dato, vediamo che non abbiamo più una lista:

print(type(str_to_int))

#risultato
#<class 'map'>

Per correggere questo problema, dobbiamo tornare indietro e aggiungere la funzione list() prima della conversione:

birthdate = "19/10/1993"

birthdate_list = birthdate.split("/")

str_to_int = list(map(int, birthdate_list))

print(type(str_to_int))
print(str_to_int)

#risultato
#<class 'list'>
#[19, 10, 1993]

Conclusioni

Ed ecco fatto! Ora conosci alcuni dei modi per trasformare una stringa in una lista in Python.

Per saperne di più sul linguaggio di programmazione Python, dai un'occhiata alla certificazione di freeCodeCamp Scientific Computing with Python Certification.

È un corso adatto anche ai principianti, ti permetterà di partire dalle basi ed imparare in modo facile ed interattivo. Inoltre, avrai modo di realizzare cinque progetti per mettere in pratica e rafforzare quanto imparato.

Grazie per il tempo dedicato alla lettura e buona programmazione!