Python:如何为不同长度行的列表左侧补0填充?
解决列表左侧补0对齐的问题
嘿,这个需求其实挺常见的,我给你几个实用的解决方案,你可以根据自己的使用场景来选:
1. 纯Python原生实现(无需额外库)
这种方法最直接,不需要依赖任何第三方库,适合处理小规模数据:
mylist = [[1],[1,2],[1,2,3]] # 先找到所有子列表里的最大长度 max_length = max(len(sublist) for sublist in mylist) # 对每个子列表左侧补0,再拼接原列表 padded_list = [[0]*(max_length - len(sublist)) + sublist for sublist in mylist] print(padded_list) # 输出: [[0, 0, 1], [0, 1, 2], [1, 2, 3]]
2. Numpy高效实现(适合大数据量)
如果你已经在使用Numpy处理数据,用np.pad函数可以更高效地完成左侧补0:
import numpy as np mylist = [[1],[1,2],[1,2,3]] max_length = max(len(sublist) for sublist in mylist) # 对每个子数组执行左侧补0操作 padded_arrays = [np.pad(sublist, pad_width=(max_length - len(sublist), 0), mode='constant', constant_values=0) for sublist in mylist] # 转换为二维Numpy数组(如果需要列表格式,再加.tolist()) result = np.array(padded_arrays) print(result) # 输出: # [[0 0 1] # [0 1 2] # [1 2 3]]
3. Pandas绕路实现(如果已有Pandas依赖)
既然你提到了Pandas的fillna默认是右侧补0,那我们可以通过反转列表的方式来间接实现左侧补0:
import pandas as pd mylist = [[1],[1,2],[1,2,3]] # 先把每个子列表反转,让需要补0的一侧转到右侧 reversed_sublists = [sublist[::-1] for sublist in mylist] # 转换成DataFrame,自动在右侧补NaN df = pd.DataFrame(reversed_sublists) # 用0填充NaN,再把每一行反转回来 padded_list = df.fillna(0).astype(int).apply(lambda row: row[::-1].tolist(), axis=1).tolist() print(padded_list) # 输出: [[0, 0, 1], [0, 1, 2], [1, 2, 3]]
内容的提问来源于stack exchange,提问作者Guillem
相关产品推荐
相关产品推荐

