10 Domande sulla lista Python più frequentemente poste su Stack Overflow

'10 Frequently Asked Python List Questions on Stack Overflow'

Domande che provengono dalla vita reale.

Foto di Towfiqu barbhuiya su Unsplash

Stack Overflow è una miniera d’oro di informazioni dove è possibile trovare migliaia di domande e risposte su software, programmazione, data science e molti altri argomenti.

Se chiedi agli autori di contenuti quali errori si aspettano che gli studenti commettano nel risolvere le loro domande o cosa potrebbe essere difficile da capire per gli studenti, rimarrai sorpreso di come gli autori di contenuti non riescano a fare una previsione accurata.

Ho menzionato questo per mettere in evidenza quanto sia preziosa l’informazione su Stack Overflow. Le domande su Stack Overflow provengono da persone che cercano di risolvere un problema nel loro lavoro o che commettono un errore nell’uso di un software. Di conseguenza, Stack Overflow riflette con grande precisione le sfide della vita reale.

In questo articolo, esamineremo le 10 domande sulla lista Python più frequentemente poste su Stack Overflow.

La lista è una struttura dati integrata in Python. Viene rappresentata come una collezione di punti dati tra parentesi quadre e può essere utilizzata per memorizzare dati di diversi tipi.

Ho cercato le domande utilizzando i tag “python” e “list” e le ho ordinate per punteggio.

Cominciamo.

1. Accesso all’indice nei cicli ‘for’

Questa domanda può essere generalizzata ad altri oggetti iterabili come tuple e stringhe. Fondamentalmente, si chiede come ottenere l’indice di un elemento insieme all’elemento stesso.

La risposta più semplice e pythonica a questa domanda è utilizzare la funzione enumerate, che restituisce una tupla contenente un conteggio e i valori ottenuti dall’iterazione sull’oggetto iterabile.

names = ["John", "Jane", "Ashley"]for idx, x in enumerate(names):    print(idx, x)# output0 John1 Jane2 Ashley

Il conteggio parte da 0 per impostazione predefinita, ma può essere modificato utilizzando il parametro start.

names = ["John", "Jane", "Ashley"]for idx, x in enumerate(names, start=10):    print(idx, x)# output10 John11 Jane12 Ashley

2. Come posso ottenere una lista piatta da una lista di liste?

Il disegno seguente illustra cosa viene chiesto in questa domanda:

Appiattimento di una lista di liste (immagine dell'autore)

Puoi fare questa conversione utilizzando una comprensione di lista come segue:

# utilizzando una comprensione di listamylist = [    [1, 5, 3],    [4, 2, 1],    [5, 6]]myflatlist = [item for sublist in mylist for item in sublist]print(myflatlist)# output[1, 5, 3, 4, 2, 1, 5, 6]

La comprensione di lista sopra può anche essere scritta come cicli for annidati. È più intuitiva e più facile da capire, ma la comprensione di lista è più performante, specialmente quando si lavora con liste di grandi dimensioni.

# utilizzando cicli formylist = [    [1, 5, 3],    [4, 2, 1],    [5, 6]]myflatlist = []for sublist in mylist:    for item in sublist:        myflatlist.append(item)        print(myflatlist)# output[1, 5, 3, 4, 2, 1, 5, 6]

Se stai utilizzando Pandas, la funzione explode semplifica questa operazione di appiattimento, ma è necessario convertire la lista in una serie di Pandas prima. Se desideri che l’output finale sia una lista, puoi convertire l’output della funzione explode in una lista utilizzando il costruttore di liste.

# usando la funzione explode
import pandas as pd
myflatlist = list(pd.Series(mylist).explode())
print(myflatlist)
# output[1, 5, 3, 4, 2, 1, 5, 6]

3. Trovare l’indice di un elemento in una lista

L’indice di un elemento può essere utilizzato per accedere all’elemento in una lista. Ecco un esempio che mostra questo caso:

names = ["John", "Jane", "Ashley", "Max", "Jane"]
# elemento con indice 2 (cioè il terzo elemento)
names[2]
# output'Ashley'

L’elemento con indice 2 è il terzo elemento perché l’indice parte da 0.

La domanda chiede come trovare quell’indice, che può essere fatto utilizzando il metodo integrato index.

names = ["John", "Jane", "Ashley", "Max", "Jane"]
names.index("Ashley")
# output2

A partire dall’inizio, il metodo index cerca nella lista in ordine fino a trovare una corrispondenza, e poi si ferma. Pertanto, nel caso di avere più occorrenze dello stesso elemento, il metodo index restituisce l’indice del primo elemento.

Se si desidera ottenere gli indici di tutte le occorrenze, è possibile utilizzare la funzione enumerate in una list comprehension come segue:

names = ["John", "Jane", "Ashley", "Max", "Jane", "Abby", "Jane"]
janes_indexes = [idx for idx, item in enumerate(names) if item == "Jane"]
print(janes_indexes)
# output[1, 4, 6]

Restituisce una lista di valori di indice per l’elemento dato.

4. Come posso concatenare due liste in Python?

È possibile concatenare le liste semplicemente utilizzando l’operatore “+”.

list_1 = [1, 3, 4]
list_2 = [12, 23, 30]
combined = list_1 + list_2
print(combined)
# output[1, 3, 4, 12, 23, 30]

È anche possibile utilizzare la funzione extend. Non restituisce una lista combinata ma estende la prima lista con gli elementi della seconda lista.

list_1 = [1, 3, 4]
list_2 = [12, 23, 30]
list_1.extend(list_2)
print(list_1) # list_1 è ora la lista combinata, list_2 rimane la stessa
# output[1, 3, 4, 12, 23, 30]

5. Come posso verificare se una lista è vuota?

Ci sono diversi modi per verificare se una lista è vuota.

Una opzione è utilizzare il fatto che sequenze e collezioni vuote sono False, che può essere utilizzato in un’istruzione if per verificare se una lista è vuota.

names = []
if not names:
    print("la lista non è vuota!")
# outputla lista non è vuota!

È anche possibile utilizzare la funzione integrata len, che restituisce il numero di elementi in una lista. Se questo valore è 0, allora la lista è vuota.

len(names)
# output0

6. Qual è la differenza tra i metodi della lista di Python append e extend?

Il metodo append può essere utilizzato per aggiungere nuovi elementi a una lista.

names = ["Jane", "Max", "Ashley"]
names.append("John")
print(names)
# output['Jane', 'Max', 'Ashley', 'John']

Qualunque sia il tipo del valore, viene aggiunto come nuovo elemento nella lista. Quindi, se si aggiunge una lista di valori, la lista diventa un singolo elemento.

names = ["Jane", "Max", "Ashley"]
new_names = ["John", "Adam"]
names.append(new_names)
print(names)
# output['Jane', 'Max', 'Ashley', ['John', 'Adam']]

L’elenco dei nomi sopra contiene 4 elementi perché “John” e “Adam” sono aggiunti come elenco, quindi “John” e “Adam” non sono gli elementi dell’elenco dei nomi.

Verifichiamo se “John” esiste nell’elenco dei nomi:

"John" in names# outputFalse

Qui entra in gioco la funzione extend. Estende l’elenco corrente con gli elementi dell’elenco nuovo. Se esegui l’esempio sopra utilizzando la funzione extend, vedrai che “John” e “Adam” vengono aggiunti come elementi separati all’elenco dei nomi.

names = ["Jane", "Max", "Ashley"]new_names = ["John", "Adam"]names.extend(new_names)print(names)# output['Jane', 'Max', 'Ashley', 'John', 'Adam']

Verifichiamo ora se “John” esiste nell’elenco dei nomi:

"John" in names# outputTrue

7. Come posso dividere un elenco in pezzi di dimensioni uguali?

Il disegno seguente illustra ciò che viene richiesto in questa domanda:

(immagine dell'autore)

La comprensione dell’elenco può essere utilizzata per questa attività.

Il primo passo è specificare una dimensione dei pezzi, che verrà utilizzata per determinare i punti di divisione.

mylist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]chunk_size = 4[mylist[i:i + chunk_size] for i in range(0, len(mylist), chunk_size)]# output[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]

Sentiti libero di giocare con la dimensione dei pezzi e vedere come cambia l’output.

8. Come ordinare un elenco di dizionari in base a un valore del dizionario in Python?

Supponiamo di avere l’elenco seguente, che contiene dizionari come elementi.

employees = [    {"name": "Max", "department": "vendite"},    {"name": "Jane", "department": "ingegneria"},    {"name": "Ashley", "department": "hr"}]

Si desidera ordinare gli elementi (cioè i dizionari) per nomi. È possibile farlo utilizzando la funzione integrata sorted di Pandas. Per ordinare in base ai nomi, è necessario specificarlo utilizzando il parametro key.

employees_sorted = sorted(employees, key = lambda x: x["name"])employees_sorted# output[{'name': 'Ashley', 'department': 'hr'}, {'name': 'Jane', 'department': 'ingegneria'}, {'name': 'Max', 'department': 'vendite'}]

Il parametro key definisce come ordinare gli elementi. In questo caso, l’espressione lambda viene utilizzata per estrarre i nomi dai dizionari, che vengono quindi utilizzati per l’ordinamento.

9. Come posso ottenere l’ultimo elemento di un elenco?

Il modo più semplice è utilizzare gli indici.

L’indice del primo elemento è 0. È anche possibile partire dall’indice dalla fine. In questo caso, l’indice del primo elemento (cioè l’ultimo elemento dell’elenco) è -1.

names = ["Jane", "Adam", "Matt", "Jennifer"]names[-1]# output'Jennifer'names[0]# output'Jane'

10. Come posso selezionare casualmente un elemento da un elenco?

Il modulo random di Python può essere utilizzato per questa attività.

Il metodo choice seleziona casualmente un singolo elemento.

import randomnames = ["Jane", "Adam", "Matt", "Jennifer", "Abby"]random.choice(names)# output'Matt'

Se vuoi prendere un campione casuale di n elementi, puoi utilizzare il metodo sample.

import randomnames = ["Jane", "Adam", "Matt", "Jennifer", "Abby"]random.sample(names, 2) # campione casuale con 2 elementi# output['Abby', 'Matt']

Conclusioni

La lista è una struttura dati frequentemente utilizzata. È mutabile e può contenere dati di tipi diversi, il che la rende una ottima scelta per lo stoccaggio e la gestione dei dati. Per scrivere programmi efficienti con Python, è necessario conoscere bene le liste e altre strutture dati integrate (ad esempio dizionari, insiemi, tuple).

Le domande affrontate in questo articolo derivano dalle sfide che le persone affrontano quando lavorano con le liste. Potresti incontrare gli stessi problemi. Anche se non li incontri, è comunque importante conoscerli per comprendere meglio le caratteristiche delle liste.

Puoi diventare un membro di Nisoo per sbloccare l’accesso completo ai miei scritti, oltre al resto di Nisoo. Se già lo sei, non dimenticare di iscriverti se desideri ricevere una e-mail ogni volta che pubblico un nuovo articolo.

Grazie per aver letto. Per favore, fammi sapere se hai qualche feedback.