Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中将多个返回值直接附加到列表中_Python - Fatal编程技术网

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

如何在Python中将多个返回值直接附加到列表中,python,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 += l

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

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\u stuff
总是返回两个列表(包括空列表)。

与您的操作完全相同。您将得到一个由两个列表组成的元组,提取每个列表并附加它们。如果您愿意,您可以使用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]
>>> 

只要稍微滥用
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
返回一个迭代器,该迭代器提供元组
(填充一[3,4,5])
(填充二[6,7,8])
starmap
将使用这些元组作为参数列表,用于连续调用
list.extend
(注意
list.extend(填充的[1,2,3])
填充的[1,2,3])
基本相同。因为
starmap
返回一个迭代器,所以您只需要一些方法来实际调用
list.extend的每次调用,这意味着使用for循环进行迭代。

是的,这与我之前的问题非常相似,我意识到我没有问清楚我需要什么,但这仍然是一个有效的问题;)为什么不在函数中添加它们呢?我想你不能。除非用其他额外代码替换现有的额外代码。对于固定数量(2)的列表,我认为您的代码是最简单和最可读的。很难将任何答案标记为正确。。。但是这里有一些很酷的技巧:)我真的不明白为什么你决定用
map
调用作为例子;它混合了许多其他简单的分散注意力的东西(特别是对于python新手)。简单地做一下会更清楚:
x,y=foo();l1+=x;l2+=x;l1;l2
。(可能避免使用小写的
L
,因为它太像
1
)@Bakuriu:问题的关键是在一行中实现同样的效果。@StefanoBorini问题是如何更直接地实现它,我不认为加入
map()
lambda
,和
zip()
比原始代码更直接。只是更复杂。吻,啊!这显然是一个黑客行为。如果必须使用
pass
才能使代码正常工作,则必须破坏某些东西。将
map
/
starmap
等与只产生副作用的功能一起使用是错误的。你甚至没有保存任何一行代码来尊重朴素的
for
循环。我同意这是一种黑客行为,但它并没有仅仅为了映射函数的副作用而使用列表理解那么糟糕。没有只为丢弃而分配的列表;迭代器多次调用该函数,并且只丢弃返回值(
None
),但无论如何,即使显式地进行了固定数量的调用,也会丢弃该值。从好的方面来说,这可以扩展到任意数量的列表进行修改(当然,只要列表已经在列表或其他可说出的列表中)。