如何向二维列表的每个子列表末尾添加1?
问题:给二维列表每个子列表末尾添加元素
原始二维列表:
pts1_list = [ [224.95256042, 321.64755249], [280.72879028, 296.15835571], [302.34194946, 364.82437134], [434.68283081, 402.86990356], [244.64321899, 308.50286865], [488.62979126, 216.26953125], [214.77470398, 430.75869751], [299.20846558, 312.07217407], [266.94125366, 119.36679077], [384.41549683, 442.05865479], [475.28448486, 254.28138733]]
期望结果:每个子列表末尾添加1,得到:
pts1_list = [ [224.95256042, 321.64755249, 1], [280.72879028, 296.15835571, 1], [302.34194946, 364.82437134, 1], [434.68283081, 402.86990356, 1], [244.64321899, 308.50286865, 1], [488.62979126, 216.26953125, 1], [214.77470398, 430.75869751, 1], [299.20846558, 312.07217407, 1], [266.94125366, 119.36679077, 1], [384.41549683, 442.05865479, 1], [475.28448486, 254.28138733, 1]]
尝试的代码:
for i in range(len(pts1)): points1_list = [pts1[i]] points1_list = np.append(points1_list,1) print(points1_list) print(pts1_list)
遇到的问题:print(points1_list)只输出最后一个添加了1的子列表,无法得到完整的新列表。
错误原因
循环中每次都重新给points1_list赋值,覆盖了之前的处理结果,因此循环结束后仅保留最后一次循环的元素。
解决方案
方案1:原生Python列表操作
初始化空列表,遍历原列表的每个子列表,复制并添加1后追加到新列表:
points1_list = [] for sublist in pts1_list: # 复制子列表避免修改原数据,添加1后加入新列表 new_sublist = sublist.copy() new_sublist.append(1) points1_list.append(new_sublist) print(points1_list)
方案2:列表推导式(简洁高效)
用一行代码完成转换,可读性和执行效率都较好:
points1_list = [sublist + [1] for sublist in pts1_list] print(points1_list)
方案3:使用numpy处理(适合后续数组操作)
如果需要用numpy数组进行后续计算,可直接转换为数组后添加列,再转回列表:
import numpy as np arr = np.array(pts1_list) # 拼接全1的列 new_arr = np.hstack((arr, np.ones((arr.shape[0], 1)))) points1_list = new_arr.tolist() print(points1_list)
内容的提问来源于stack exchange,提问作者blazingcannon
相关产品推荐
相关产品推荐

