将二维数组 lists = [[1, 2], [3, 4], [5]] 展开成一维数组 [1, 2, 3, 4, 5]
之前写法:[x for L in lists for x in L]
Python 3.15 新语法:[*L for L in lists]
这个新语法真是简洁又直观,,这么符合直觉的语法怎么之前没想到添加??
1
JeffGe 19 小时 47 分钟前
确实很符合直觉,我没去查资料之前还以为这语法早就可以用了。
|
2
glacer 19 小时 46 分钟前
同,我自己想也是想到这样做。
|
3
yuruizhe 19 小时 31 分钟前
我都是
from functools import reduce from operator import add reduce(add, [[1, 2], [3, 4], [5]]) 绝不手写逻辑,100%掉包 |
4
HotieCutie 19 小时 28 分钟前
js 直接 flat()
|
5
june4 18 小时 22 分钟前 这点功能搞个新语法?不能 [x for L in lists.flat()] 吗
|
6
fisherman0459 18 小时 15 分钟前
list(itertools.chain.from_iterable(lists))
|
7
Ketteiron 17 小时 59 分钟前
@june4 #5 行不通,js 的 flat 只会对真正的数组进行操作,会使用类似 Array.isArray() 的判断,但 py 会产生歧义
在 py 里,字符串是无限递归的可迭代对象,如果要保持旧有设计就无法拍平,因此只能在一些工具函数里进行操作,硬编码一些判断 而 *L for L in lists 并非是用来解决二维数组拍平的,它解决的是无法在推导式中解包的设计缺陷。 |
8
szyp 17 小时 52 分钟前
之前还直接这么试过,报错,直觉上就应该这么实现
|