16 utili Python One-Liner per semplificare le attività comuni

Stai cercando di scrivere codice elegante e Pythonic? Ecco un elenco di utili one-liner in Python per eseguire compiti semplici.

Se sei un programmatore Python principiante, passerai del tempo a comprendere le strutture di dati di base come elenchi e stringhe. E alcune operazioni su queste strutture di dati possono essere eseguite tramite frammenti di codice concisi di una riga.

In qualità di programmatore, dovresti dare la priorità alla leggibilità e alla manutenibilità rispetto alla riduzione del codice. Ma Python è facile trovare battute che seguono buone pratiche di codifica.

In questo articolo, ci concentreremo su one-liner per semplici attività di elaborazione di elenchi e stringhe in Python.

Iniziamo!

Genera un elenco di numeri

Il modo più semplice per generare un elenco di numeri è utilizzare la funzione range(). La funzione range() restituisce un oggetto range che puoi inserire in un elenco. L’uso di range(num) darà la sequenza 0, 1, 2,.., num-1.

>>> nums = list(range(10))
>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Ulteriori informazioni sull’utilizzo della funzione range()

Puoi anche utilizzare la funzione range() insieme a un valore di passaggio facoltativo. Quindi range (start, end, step) darà alla sequenza start, start + step, start + 2*step, e così via. L’ultimo valore sarà inizio + k*passo tale che (inizio + k*passo) < fine e (inizio + (k+1)*passo) > fine.

Trova i valori massimo e minimo in un elenco

È possibile utilizzare le funzioni predefinite max e min per calcolare rispettivamente gli elementi massimo e minimo in un elenco.

>>> min_elt, max_elt = min(nums), max(nums)
>>> min_elt
0
>>> max_elt
9

📑 Nota sull’assegnazione multipla

Si noti che abbiamo assegnato valori sia a min_elt che a max_elt in una singola istruzione di assegnazione. Python supporta tale assegnazione multipla. E questo può essere utile quando si decomprimono gli iterabili e si assegnano valori a più variabili contemporaneamente.

Rimuovi i duplicati da un elenco

Un’altra operazione comune è la rimozione dei duplicati dagli elenchi Python. Questo è necessario quando devi lavorare solo con i valori univoci. Il modo più semplice per farlo è convertire l’elenco in un set.

Un set è una struttura di dati incorporata i cui elementi sono tutti univoci e hashable.

>>> nums1 = [2,4,7,9,7,10]

In nums1, l’elemento 7 ricorre due volte. Casting in un set rimuoverà il duplicato (qui, 7) lasciandoci con un elenco di valori univoci.

Poiché dobbiamo ancora lavorare con l’elenco, riconvertiamo il set in un elenco. Questa operazione può essere eseguita con la seguente riga di codice:

>>> nums1 = list(set(nums1))
>>> nums1
[2, 4, 7, 9, 10]

📒 Per saperne di più su altre tecniche per rimuovere i duplicati dagli elenchi Python, consulta questa guida.

Contare le occorrenze in un elenco

Per contare il numero di volte in cui un elemento compare in un elenco, puoi utilizzare il metodo integrato count(). list.count(elt) restituisce il numero di volte in cui elt compare nell’elenco.

>>> nums
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Qui, 7 ricorre una volta nell’elenco dei numeri, quindi il metodo count() restituisce 1.

>>> nums.count(7)
1

Controlla se tutti gli elementi nell’elenco soddisfano una condizione

Per controllare se tutti gli elementi in una lista soddisfano una condizione, puoi usare la funzione incorporata all() di Python.

La funzione all() accetta un iterabile come argomento e restituisce True se tutti gli elementi nell’iterabile restituiscono True (o sono veritieri).

Qui, vorremmo verificare se tutti gli elementi nell’elenco nums2 sono dispari.

>>> nums2 = [3,4,7,11,21,67,12]

Possiamo usare la comprensione dell’elenco per costruire un elenco di valori booleani e possiamo passare tale elenco come argomento alla funzione all().

Qui, num%2!=0 sarà Falso per gli elementi 4 e 12 che sono pari. Pertanto, l’elenco di booleani costruito utilizzando l’espressione di comprensione dell’elenco contiene False (e all(list) restituisce False).

>>> all([num%2!=0 for num in nums2])
False

💡 È importante notare che tutti([]) (all(any-empty-iterable) restituisce True.

Controlla se qualsiasi elemento nell’elenco soddisfa una condizione

Per verificare se un elemento in un elenco soddisfa una condizione, puoi utilizzare la funzione any(). any(some-list) restituisce True se almeno un elemento restituisce True.

>>> nums2 = [3,4,7,11,21,67,12]

Come nell’esempio precedente, usiamo la comprensione dell’elenco per ottenere un elenco di booleani. L’elenco dei numeri contiene numeri pari. Quindi la funzione any() restituisce True.

>>> any([num%2 for num in nums2])
True

Inverti una stringa

In Python, le stringhe sono immutabili, quindi quando vuoi invertire una stringa, puoi ottenere solo una copia invertita della stringa. Ci sono due approcci comuni—entrambi possono essere scritti come Python one-liner—che usano string slicing e funzioni incorporate.

Utilizzo di String Slicing

L’affettamento di stringhe con valori negativi di step restituisce una sezione della stringa a partire dalla fine. La sintassi è stringa[start:stop:step]. Quindi cosa restituisce l’impostazione del passo di -1 e ignorando gli indici di avvio e arresto?

Restituisce una copia della stringa, a partire dalla fine della stringa, inclusi tutti i caratteri.

>>> str1[::-1]
'olleh'

Usando la funzione reverse()

La funzione incorporata reversed() restituisce un iteratore inverso su una sequenza.

>>> reversed(str1)
<reversed object at 0x008BAF70>
>>> for char in str1:
...     print(char)
...
h
e
l
l
o

Puoi usarlo insieme al metodo join(), come mostrato:

>>> ''.join(reversed(str1))
'olleh'

Converti una stringa in un elenco di caratteri

Supponiamo di voler suddividere una stringa in un elenco di caratteri. Possiamo farlo usando l’espressione di comprensione dell’elenco.

>>> str1 = 'hello'

Le comprensioni delle liste sono una delle battute più potenti in Python.

📒 Scopri di più sulla comprensione delle liste in Python.

Passiamo in rassegna la stringa e raccogliamo ogni carattere.

>>> chars = [char for char in str1]
>>> chars
['h', 'e', 'l', 'l', 'o']

Per dividere una stringa più lunga in un elenco di stringhe su ogni occorrenza di spazi bianchi, è possibile utilizzare il metodo split().

>>> str2 = 'hello world'
>>> str2.split()
['hello', 'world']

Abbiamo già visto come utilizzare la comprensione dell’elenco per suddividere una stringa in un elenco di caratteri. In quell’esempio, abbiamo raccolto tutti i caratteri scorrendo la stringa.

Qui, dobbiamo scorrere la stringa e raccogliere solo le cifre. Allora come lo facciamo?

  • Possiamo impostare la condizione di filtraggio nell’espressione di comprensione dell’elenco utilizzando il metodo isdigit().
  • c.isdigit() restituisce True se c è una cifra; altrimenti restituisce False.
>>> str3 = 'python3'
>>> digits = [c for c in str3 if c.isdigit()]
>>> digits
['3']

Controlla se una stringa inizia con una sottostringa specifica

Per verificare se una stringa inizia con una sottostringa specifica, puoi utilizzare il metodo della stringa startswith(). str1.startswith(substring) restituisce True se str1 inizia con substring. In caso contrario, restituisce False.

Qui ci sono un paio di esempi:

>>> str4 = 'coding'
>>> str4.startswith('co')
True
>>> str5 = 'python'
>>> str5.startswith('co')
False

Controlla se una stringa termina con una sottostringa specifica

Come avrai intuito, per verificare se una stringa termina con una data sottostringa, puoi utilizzare il metodo endswith().

>>> str5 = 'python'
>>> str5.endswith('on')
True

Possiamo anche utilizzare il metodo stringa all’interno di un’espressione di comprensione dell’elenco per ottenere finisce_con, un elenco di valori booleani.

>>> strs = ['python','neon','nano','silicon']
>>> ends_with = [str.endswith('on') for str in strs]
>>> ends_with
[True, True, False, True]

Unire gli elementi di una lista in una stringa

Abbiamo già visto come suddividere una stringa in un elenco di caratteri. Ora come facciamo l’operazione inversa di unire gli elementi di una lista in una stringa?

Per fare questo, puoi usare il metodo stringa join() con la sintassi: separator.join(some-list).

Vorremmo solo combinare gli elementi nell’elenco in un’unica stringa; non abbiamo bisogno di alcun separatore. Quindi impostiamo il separatore su una stringa vuota.

>>> list_1 = ['p','y','t','h','o','n','3']
>>> ''.join(list_1)
'python3'

Crea un dizionario Python

Proprio come le list comprehension possono aiutarci a costruire nuove liste da iterable esistenti, le dictionary comprehension possono aiutarci a costruire nuovi dizionari da iterable esistenti.

Le comprensioni del dizionario Python sono potenti one-liner che possono aiutare a costruire aiutare a creare un dizionario al volo.

Qui abbiamo i nomi che sono un elenco di stringhe.

>>> names = ['Joe','Amy','Jake','Florence']

Creiamo names_d, un dizionario contenente stringhe di nomi come chiavi e le lunghezze delle stringhe come valore.

>>> names_d = {name:len(name) for name in names}
>>> names_d
{'Joe': 3, 'Amy': 3, 'Jake': 4, 'Florence': 8}

Assegnare condizionalmente valori alle variabili

A volte potrebbe essere necessario assegnare valori alle variabili in base a una condizione specifica.

Ad esempio, potresti leggere nell’input dell’utente, ad esempio, l’età dell’individuo. E a seconda del valore di input, puoi decidere se sono autorizzati o meno a partecipare a una festa.

Per eseguire questa assegnazione condizionale in Python, puoi scrivere la seguente riga usando l’operatore ternario.

>>> age = 21
>>> allowed = True if age >= 18 else False
>>> allowed
True

🔖 Ulteriori informazioni sull’operatore ternario in Python.

Genera tutte le permutazioni

La permutazione si riferisce a una possibile disposizione di elementi in un gruppo. Se ci sono n elementi univoci in un gruppo, ci sono n! modi possibili per organizzarli – e quindi, n! permutazioni.

Usiamo le seguenti lettere di elenco:

>>> letters = ['a','b','c']

È possibile utilizzare le permutazioni dal modulo itertools per generare tutte le possibili permutazioni dell’iterabile dato.

>>> letters_p = permutations(letters)
>>> letters_p
<itertools.permutations object at 0x0127AF50>

Come visto, usando permutations(iterable) restituisce un oggetto di permutazione che possiamo scorrere usando un ciclo for:

>>> for p in letters_p:
...     print(p)
...
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')

Ma possiamo riscriverlo come un’espressione di una riga eseguendo il cast dell’oggetto di permutazione in un elenco:

>>> letters_p = list(permutations(letters))
>>> letters_p
[('a', 'b', 'c'), ('a', 'c', 'b'), ('b', 'a', 'c'), ('b', 'c', 'a'), ('c', 'a', 'b'), ('c', 'b', 'a')]

Qui ci sono tre elementi unici e ci sono 3!=6 possibili permutazioni.

Genera sottoinsiemi di un elenco

A volte potrebbe essere necessario costruire tutti i possibili sottoinsiemi di una dimensione particolare da un elenco o altri iterabili. Usiamo l’elenco delle lettere e otteniamo tutte le sottoliste di dimensione 2.

Per fare ciò, possiamo usare combinazioni dal modulo itertools, in questo modo:

>>> from itertools import combinations
>>> letters_2 = list(combinations(letters,2))
>>> letters_2
[('a', 'b'), ('a', 'c'), ('b', 'c')]

Conclusione

In questo tutorial, abbiamo esaminato utili one-liner Python per eseguire operazioni comuni su elenchi e stringhe. Abbiamo anche imparato one-liner come l’elenco Python e la comprensione del dizionario e come usarli insieme alle funzioni integrate per eseguire le attività desiderate.

Come passaggio successivo, dai un’occhiata a questo elenco di progetti Python adatti ai principianti.