我有两个列表(列表_1,列表_2)和一个返回两个列表(列表_1_f,列表_2_f)的函数,我想将列表_1_f的项目添加到列表_1,将列表_2_f的项目添加到列表_2:
def lists():
list_1_f = [10,10,10]
list_2_f = [20,20,20]
return list_1_f,list_2_f
list_1, list_2 = [1,1,1], [2,2,2]
这种情况是,我总是有2个原始列表,而扩展将仅用于另外两个列表。这样一来,最后我将有两个包含原始项目的列表以及从函数中获得的列表,输出将是:
list_1 = [1,1,1,10,10,10]
list_2 = [2,2,2,20,20,20]
我已经尝试过使用扩展功能执行以下几行,但是没有用:
list_1.extend([]), list_2.extend([]) = lists()
list_1.extend(), list_2.extend() = lists()
list_1.extend, list_2.extend = lists()
我总是可以做到以下几点:
list_1a, list_2a = lists()
list_1.extend(list_1a)
list_2.extend(list_2a)
但是我想知道是否甚至有可能在不创建两个中间列表的情况下进行扩展。
答案 0 :(得分:1)
这不可能直接实现,因为赋值左侧必须是函数调用。它只能由简单变量,数据成员,下标和逗号,括号或方括号构成。
最好的方法是在右侧使用理解或地图:
list_1, list_2 = map(lambda x: sum(x, []), zip((list_1, list_2), lists()))
(感谢@meowgoesthedog这样)
使用3行的清晰代码是否更好取决于读者。恕我直言,唯一真正的用例是在仅支持唯一表达式的lambda内