如果函数返回两个值,那么如何从函数结果直接将它们直接附加到两个单独的列表? 像这样:
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
假设get_stuff
总是返回2个列表(包括空列表)。
答案 0 :(得分:0)
正如你所做的那样。您将获得两个列表的元组,提取每个列表并附加它们。如果你愿意,你可以使用zip(),但对于两个列表的情况,我不会打扰。
>>> 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]
>>>
答案 1 :(得分:0)
如果轻微滥用for
循环,您可以使用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
返回一个迭代器,它提供元组(stuffed_one, [3,4,5])
和(stuffed_two, [6,7,8])
。 starmap
将使用这些元组作为连续调用list.extend
的参数列表(请注意list.extend(stuffed_one, [1,2,3])
与stuffed_one.extend([1,2,3])
基本相同)。由于starmap
返回一个迭代器,你只需要一些方法来实际调用list.extend
的每个调用,这意味着使用for循环进行迭代。