Python中如何不使用for循环从二维数组提取各子数组第n个元素组成新数组
实现方案
这里提供3种符合要求的实现,均无显式for循环,可一行写完:
1. 纯Python无依赖方案1(map实现,兼容性最强)
直接通过map遍历每个子数组取对应索引,子数组长度不一致时只要目标索引存在就可正常运行:
# n为要提取的元素位置索引,从0开始计数,你示例里的第2个元素对应n=1 res = list(map(lambda x: x[1], [[1,2,3],[4,5,6],[7,8,9]])) # 输出:[2,5,8]
2. 纯Python无依赖方案2(zip实现,写法更简洁)
对二维数组解包后用zip按列重组,直接取对应列即可:
res = list(list(zip(*[[1,2,3],[4,5,6],[7,8,9]]))[1]) # 输出:[2,5,8]
注意:该方案要求所有子数组长度都大于等于目标索引+1,否则会按最短子数组长度截断。
3. 大数据量最优方案(numpy实现,性能最高)
如果是处理大规模数值数组,用numpy切片性能远高于纯Python实现:
import numpy as np res = np.array([[1,2,3],[4,5,6],[7,8,9]])[:,1].tolist() # 输出:[2,5,8]
内容的提问来源于stack exchange,提问作者Libra
相关产品推荐
相关产品推荐

