/ / Come aggiungere i valori di ritorno multipli, direttamente a una lista, in Python - python

Come aggiungere i valori di ritorno multipli, direttamente a una lista, in Python - python

Se una funzione restituisce due valori, come li aggiungi direttamente a due elenchi separati direttamente dal risultato della funzione? Qualcosa come questo:

def get_stuff():
return [3,4,5], [9,10,11]

stuffed_one = [1,2,3]
stuffed_two = [6,7,8]
# How do I add directly from the next line, without the extra code?
lst_one, lst_two = get_stuff()
stuffed_one += lst_one
stuffed_two += lst_two

Assumere get_stuff restituisce sempre 2 elenchi (incluse le liste vuote).

risposte:

0 per risposta № 1

Esattamente come hai fatto tu. Stai ottenendo una tupla di due elenchi, estrai ognuno di essi e aggiungili. Se vuoi, puoi essere fantasioso con zip (), ma per i casi di due elenchi non mi preoccuperei.

>>> def foo():
...     return [1,2,3], [4,5,6]
...
>>> l1=["a", "b"]
>>> l2=["d", "e"]
>>> l1, l2=map(lambda x: x[0]+x[1], zip((l1, l2), foo()))
>>> l1
["a", "b", 1, 2, 3]
>>> l2
["d", "e", 4, 5, 6]
>>>

0 per risposta № 2

Con un leggero abuso di a for loop, puoi usare itertools.starmap.

from itertools import starmap

def get_stuff():
return [3,4,5], [9,10,11]

stuffed_one = [1,2,3]
stuffed_two = [6,7,8]

for _ in starmap(list.extend, zip([stuffed_one, stuffed_two], get_stuff())):
pass

zip restituisce un iteratore che fornisce le tuple (stuffed_one, [3,4,5]) e (stuffed_two, [6,7,8]). starmap userà quelle tuple come liste di argomenti per chiamate successive a list.extend (nota che list.extend(stuffed_one, [1,2,3]) è essenzialmente lo stesso di stuffed_one.extend([1,2,3])). Da starmap restituisce un iteratore, hai solo bisogno di un modo per chiamare effettivamente ogni invocazione di list.extend, che significa iterare con il ciclo for.