如何在Python中将多个返回值直接附加到列表中

时间:2014-07-13 12:07:36

标签: python

如果函数返回两个值,那么如何从函数结果直接将它们直接附加到两个单独的列表? 像这样:

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个列表(包括空列表)。

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循环进行迭代。