/ / Jak dodać wiele wartości zwracanych bezpośrednio do listy w Pythonie - python

Jak dołączyć wiele wartości zwracanych bezpośrednio do listy w Pythonie - python

Jeśli funkcja zwraca dwie wartości, w jaki sposób można dołączyć je bezpośrednio do dwóch oddzielnych list bezpośrednio z wyniku funkcji? Coś takiego:

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

Założyć get_stuff zawsze zwraca 2 listy (w tym puste listy).

Odpowiedzi:

0 dla odpowiedzi № 1

Dokładnie tak jak ty. Otrzymujesz krotkę dwóch list, wyodrębnij każdą z nich i dołącz je. Jeśli chcesz, możesz uzyskać wymyślne zip (), ale w przypadku dwóch list nie zawracałbym sobie głowy.

>>> 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 dla odpowiedzi nr 2

Z lekkim nadużyciem a for pętli, możesz użyć 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 zwraca iterator, który dostarcza krotki (stuffed_one, [3,4,5]) i (stuffed_two, [6,7,8]). starmap użyje tych krotek jako list argumentów dla kolejnych wywołań list.extend (zauważ że list.extend(stuffed_one, [1,2,3]) jest zasadniczo taki sam jak stuffed_one.extend([1,2,3])). Od starmap zwraca iterator, potrzebujesz tylko sposobu, aby wywołać każde wywołanie list.extend, co oznacza iterację z pętlą for.