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中的传播运算符的列表? [复制]的主要内容,如果未能解决你的问题,请参考以下文章