python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]

Posted

技术标签:

【中文标题】python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]【英文标题】:is there a way in python to unpack a list similar to spread operator in javascript? [duplicate] 【发布时间】:2021-12-21 11:11:44 【问题描述】:

这可能不是一个完美的例子(我知道这对列表理解更容易),但是如果我们在 lambda 函数中创建从 split() 创建的子列表,有没有办法解压它使用地图方法?也请不要在 map 之外添加单独的函数来平展列表。

data = ['oh my god','that is','super duper']
list(map(lambda i: i.split(), data))
>>> [['oh', 'my', 'god'], ['that', 'is'], ['super', 'duper']]

预期结果是这样的扁平化列表。 ['oh', 'my', 'god', 'that', 'is', 'super', 'duper']

【问题讨论】:

不适用于list(map(lambda..., data))map 始终为您提供与您输入的相同数量的元素。您可以通过列表理解获得所需的输出,您似乎已经知道了。 我明白了.. 似乎在 js 中你可以做类似 [ ...[], ...[], ...[] ] 只需使用list-comprehension进行平面地图操作,[s for string in data for s in string.split()] 或者,from collections import chain 然后list(chain.from_iterable(map(lambda i: i.split(), data))) 【参考方案1】:

有点“hacky”的解决方案,但这会起作用

sum(list(map(lambda i: i.split(), data)), [])

【讨论】:

哈哈,它很可爱,但是很老套……我在找一个优雅的 还有一个有趣的问题:为什么它不产生 [[result]]? b/c 本质上是在内部将 [a]+ [b]+ [] 加在一起,而外部 [] 仍然是从 list() 函数创建的?? 出于同样的原因 sum([1, 2, 3], 7) 产生 13 而不是 [13]。结果实际上是[] + ['a'] + ['b'] 不要使用这个,这是一个众所周知的反模式,它以文档中特别警告的方式使用内置的sum。在O(N) 中执行此操作很简单时是 O(N^2) @somniumm 说list 其实是多余的

以上是关于python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript字符串压缩+ PHP解压缩[关闭]

Linux 压缩与解压缩工具gzip/gunzip

有没有办法在 python 解释器中停用 virtualenv?即类似于 deactivate_this

在python中读取csv压缩文件

Python:将二进制文件解压缩成二维数组并给出长度错误

在python中按块解压缩文件夹