可以一次扩展两个列表吗?

Posted

技术标签:

【中文标题】可以一次扩展两个列表吗?【英文标题】:Possible to extend two lists at once? 【发布时间】:2019-10-22 18:35:34 【问题描述】:

我有两个列表 (list_1,list_2) 和一个返回两个列表 (list_1_f, list_2_f) 的函数,我想将 list_1_f 的项目添加到 list_1 并将 list_2_f 的项目添加到 list_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)

但我想知道是否甚至可以在不必创建两个中间列表的情况下进行扩展。

【问题讨论】:

请问扩展是什么意思?就像在第一个列表中添加第 4 (1) 个,在第二个列表中添加第 4 (2) 个?如果您能明确说明您希望代码做什么,那么为您提供帮助会更容易。 你想用相同的元素扩展两个列表,还是不同的元素,请更清楚 我认为 OP 只是想要一个平面列表作为调用函数的结果? 你能给哈维尔一些反馈吗?显然很不清楚你在问什么 不太清楚为什么要定义一个函数来生成列表......你应该更清楚......投票结束 【参考方案1】:

这是不可能的,因为必须在赋值左侧的不能是函数调用。它只能由简单的变量、数据成员、下标和逗号、括号或方括号构成。

最好的办法是在右侧使用理解或地图:

list_1, list_2 = map(lambda x: sum(x, []), zip((list_1, list_2), lists()))

(感谢@meowgoesthedog 提供的方式)

使用 3 行的清晰代码是否更好取决于读者。恕我直言,唯一真正的用例是在仅支持唯一表达式的 lambda 中

【讨论】:

我认为最好避免两次调用lists(),并执行*map(sum, zip((list_1, list_2), list()))之类的操作。 让我们都同意,这是丑陋的罪恶,并不比 OP 的代码更好。 sum(x, []) 是一个非常低效的反模式

以上是关于可以一次扩展两个列表吗?的主要内容,如果未能解决你的问题,请参考以下文章

可以一次附加多个列表吗? (Python)

我可以一次将单个 MFI 配件与两个应用程序连接吗

记一次UnityEditor编辑器扩展开发参考BuildReportTools插件自定义高效列表

为新用户填充一次 localStorage [重复]

Chrome扩展程序浏览器操作仅适用一次

您可以一次要求所有节点模块吗[关闭]