Python中如何将列表元素按每行2个填充为矩阵?
将列表按指定行数分割为嵌套列表
首先看你写的代码存在的问题:
- 初始化
b = [[]],但循环中使用b[i],当i从1开始时,b的长度只有1,会触发索引越界错误 - 嵌套的
j循环会重复2次添加同一个c[i]元素,逻辑完全不符合需求
下面是几种正确的实现方式:
方法1:利用列表切片(最简洁)
直接通过切片按步长分割原列表:
c = [1, 2, 3, 4, 5, 6] row_size = 2 b = [c[i:i+row_size] for i in range(0, len(c), row_size)] print(b) # 输出 [[1,2], [3,4], [5,6]]
方法2:手动循环构建
如果想用循环实现,可以这样写:
c = [1, 2, 3, 4, 5, 6] row_size = 2 b = [] current_row = [] for num in c: current_row.append(num) # 当当前行元素数量达到指定长度时,加入矩阵并重置当前行 if len(current_row) == row_size: b.append(current_row) current_row = [] # 如果原列表长度不是row_size的整数倍,把剩余元素加入(这里原列表刚好整除,可省略) if current_row: b.append(current_row) print(b) # 输出 [[1,2], [3,4], [5,6]]
方法3:使用迭代器(适合大数据量)
用iter()把列表转为迭代器,再批量取元素:
c = [1, 2, 3, 4, 5, 6] row_size = 2 it = iter(c) b = [list(next(it) for _ in range(row_size)) for _ in range(len(c)//row_size)] print(b) # 输出 [[1,2], [3,4], [5,6]]
内容的提问来源于stack exchange,提问作者Infernalissss
相关产品推荐
相关产品推荐

