Google Apps Script中JavaScript二维数组提取子元素的替代方案
问题描述
给定如下二维数组:
[ ['Cycling','Chess'], ['Cycling','Pilates'], ['Cycling','Elevate'], ['Cycling','Kundalini'], ['Cycling','Scrabble'], ['Cycling','Crossword'], ['Cycling','Darning'], ['Running','Ashtanga'], ['Running','Poker'], ['Running','Sudoku'], ['Running','Sewing'], ['Running','Jump'], ['Boxing','Mushin'], ['Boxing','Tai'], ['Boxing','Tae'], ['Boxing','1000'], ['Boxing','Transient'], ['Boxing','Walking'], ['Strength','Flow'], ['Strength','Tantric'], ['Strength','Quigong'], ['Strength','Active'] ]
需要将其处理为仅保留每个子数组第二个元素的新二维数组,期望结果如下:
['Chess'], ['Pilates'], ['Elevate'], ['Kundalini'], ['Scrabble'], ['Crossword'], ['Darning'], ['Ashtanga'], ['Poker'], ['Sudoku'], ['Sewing'], ['Jump'], ['Mushin'], ['Tai'], ['Tae'], ['1000'], ['Transient'], ['Walking'], ['Flow'], ['Tantric'], ['Quigong'], ['Active']
由于原生split仅适用于一维数组,希望找到类似NumPy中hsplit函数的替代实现方法。
解决方案
1. Python原生列表推导式(最简实现)
无需依赖第三方库,直接遍历原数组提取目标元素并包装为单元素子数组:
original_arr = [ ['Cycling','Chess'], ['Cycling','Pilates'], # 省略其余元素 ['Strength','Active'] ] result = [[item[1]] for item in original_arr]
执行后result即为目标数组。
2. 函数式风格:map+匿名函数
如果偏好函数式编程写法,可使用map批量处理每个子数组:
result = list(map(lambda x: [x[1]], original_arr))
map会对原数组的每个子数组应用匿名函数,提取第二个元素并包装,最后转换为列表即可。
3. NumPy环境下的实现(类似hsplit思路)
如果原本就在用NumPy处理数组,可通过切片直接提取指定列并保留二维结构:
import numpy as np original_np = np.array(original_arr) # 提取第二列(索引为1),保持二维形状 result_np = original_np[:, 1:2] # 转回Python列表格式 result = result_np.tolist()
这里的[:, 1:2]操作和hsplit的效果类似,直接拆分出目标列并维持二维结构。
内容的提问来源于stack exchange,提问作者Drew254
相关产品推荐
相关产品推荐

