Domanda

Sono un novizio a Python. Si consideri la funzione str.partition() che restituisce una tupla di 3 elementi. Se io sono interessato a solo gli elementi 0 e 2 del presente tuple, qual è il modo migliore per scegliere solo alcuni elementi di tale tupla?

I possono attualmente effettuare una:

# Introduces "part1" variable, which is useless
(part0, part1, part2) = str.partition(' ')

o

# Multiple calls and statements, again redundancy
part0 = str.partition(' ')[0]
part2 = str.partition(' ')[2]

Mi piacerebbe essere in grado di fare qualcosa come questo, ma non può:

(part0, , part2) = str.partition(' ')
# Or:
(part0, part2)   = str.partition(' ')[0, 2]
È stato utile?

Soluzione

sottolineatura è spesso usato come un nome per roba che non è necessario, in modo da qualcosa come questo dovrebbe funzionare:

part0, _, part2 = str.partition(' ')

In questo caso particolare, si potrebbe fare questo, ma non è una soluzione abbastanza:

part0, part2 = str.partition(' ')[::2]

Una soluzione più esoterica:

from operator import itemgetter
part0, part2 = itemgetter(0, 2)(str.partition(' '))

Altri suggerimenti

Una corretta, non si può prendere diversi elementi ad hoc su una lista di tuple in una sola volta.

part0, part1, part2 = str.partition(' ')

è la strada da percorrere. Non preoccuparti di part1, se non ne hai bisogno, non ne ha bisogno. E 'comune a chiamarla "fittizio" o "non utilizzati" per mostrare che non è utilizzato.

Si può essere brutto con:

part0, part2 = str.partition(' ')[::2]

In questo caso specifico, ma che è offuscando e non piacevole verso gli altri. ;)

Credo che una domanda ho chiesto qualche tempo fa potrebbe aiutare a:

modo Pythonic per ottenere alcune righe di una matrice

NumPy ti dà la sintassi slice che si desidera estrarre diversi elementi utilizzando una tupla o una lista di indici, ma io non credo che si desidera convertire si elenco di stringhe a un numpy.array solo per estrarre alcuni elementi , così forse si potrebbe scrivere un aiutante:

def extract(lst, *indices):
    return [lst[i] for i in indices]

item0, item2 = extract(str.partition(' '), 0, 2)

si potrebbe anche usare str.split(' ', 1) invece di str.partition(' ')

si otterrà indietro una lista al posto di una tupla, ma non sarà possibile ottenere il separatore di nuovo

Ecco come lo farei:

all_parts = str.partition(' ')
part0, part2 = all_parts[0], all_parts[2]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top