Python中如何优雅将HTML表格转换得到的一维列表转为嵌套列表
问题场景
现有一段可提取指定HTML表格单元格数据生成一维列表的Python代码,实现如下:
import pandas as pd import numpy as np my_table = pd.read_html('<目标网页URL>') df = my_table[0] my_list = [int(v) for v in '-'.join(df['Position']).split('-')] print(my_list)
代码可正常运行,执行后输出的一维列表内容为:
[1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 10, 10, 11, 12, 13]
需要将上述一维列表转换为如下格式的嵌套列表:
[[1, 2, 3, 4],[4, 5, 6, 7],[7, 8, 9, 10],[10, 11, 12, 13]]
简洁实现方案
观察拆分规律:每4个元素为一组,相邻组共享首尾元素(前一组的最后一个元素是后一组的第一个元素),用Python原生的列表切片+列表推导式就能实现,不需要额外依赖,代码简洁易读:
# 已生成my_list的前提下执行 group_len = 4 step = group_len - 1 nested_list = [my_list[i:i+group_len] for i in range(0, len(my_list)-step, step)]
执行后打印nested_list就能得到目标格式的结果:
[[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10], [10, 11, 12, 13]]
方案说明
- 核心逻辑是固定大小的滑动窗口切片:窗口长度设为4,每次滑动步长为3,刚好匹配相邻组共享首尾元素的拆分规则
- 纯Python原生语法实现,没有额外依赖,执行效率高
- 通用性好,如果后续需要调整每组的元素数量,只需要修改
group_len的取值即可自动适配
如果你的代码流程中已经引入numpy做数据处理,也可以用numpy内置的滑动窗口API实现,代码更短:
import numpy as np nested_list = np.lib.stride_tricks.sliding_window_view(my_list, 4)[::3].tolist()
内容的提问来源于stack exchange,提问作者anagnam
相关产品推荐
相关产品推荐

