/ / Spacchetta la striscia in una combinazione di numeri interi e list - python, python-3.x

Scompattate la striscia in una combinazione di numeri interi e list - python, python-3.x

Ho stringhe simili a 1 2 3 4 5 6 e posso scompattarli in questo modo:

id, amount, p0, p1, p2, p3 = [int(i) for i in s.split()]

Ora metto p0 - p3 in una lista temporanea list = [p0, p1, p2, p3] e iterare su di esso. C'è un modo elegante per saltare l'ultimo passo e fare lo stesso per x variabili:

id, amount, list = ...

risposte:

4 per risposta № 1

Puoi usare * per acquisire i valori "rimanenti" in una variabile:

id, amount, *p_values = [int(i) for i in s.split()]

Python consente 1 variabile di questo tipo durante l'assegnazione; otterrà tutti i valori rimanenti dal lato destro dopo tutti gli altri nomi senza * hanno ricevuto un valore:

>>> foo, bar, *baz = range(5)
>>> foo, bar, baz
(0, 1, [2, 3, 4])
>>> foo, *bar, baz = range(5)
>>> foo, bar, baz
(0, [1, 2, 3], 4)
>>> *foo, bar, baz = range(5)
>>> foo, bar, baz
([0, 1, 2], 3, 4)

Vedere il PEP-3132 Iterable Extended Unpacking:

Una tupla (o lista) sul lato sinistro di un semplicel'assegnazione (la decompressione non è definita per l'assegnazione aumentata) può contenere al massimo un'espressione preceduta da un singolo asterisco (che d'ora in poi viene chiamata espressione "stellata", mentre le altre espressioni nell'elenco sono chiamate "obbligatorie"). Questo designa una sottoespressione a cui verrà assegnato un elenco di tutti gli elementi dall'iterable scompattato che non sono assegnati a nessuna delle espressioni obbligatorie, o una lista vuota se non ci sono tali elementi.


0 per risposta № 2

L '"eleganza" di questo metodo è al massimo grado di dibattito. Ma potresti fare qualcosa come:

list = [int(i) for i in s.split()]
id = list.pop(0)
amount = list.pop(0)

Questo in realtà è più linee di codice, ma se stai seguendo un elenco di intro è molto lungo non dovresti digitare una serie così lunga di p1,p2,p3... e metterlo in un'altra lista