Python如何通过for循环生成按3个元素分组的多层嵌套列表
问题解决办法
你的代码没有实现预期分组效果的核心原因是final_list没有在每次外层i循环开始时重置,所有计算得到的子列表都被追加到了同一个全局列表里,最终所有分组都指向同一个全量数据的列表,自然无法得到分层的嵌套结构。
修改后的完整代码如下:
if __name__ == '__main__': final_list_2=[] with open(infile, "r+b") as tsv_in_file: reader = csv.DictReader(codecs.iterdecode(tsv_in_file,'utf-8'), delimiter='\t', fieldnames = FIELDNAMES) for item in reader: for field in ['boxes']: item[field] = np.frombuffer(base64.b64decode(item[field]), dtype=np.float32).reshape((int(item['num_boxes']),-1)) for i in range(len(item[field])): # 每次i循环开始时初始化新的分组列表,清空上一组的内容 final_list=[] for j in range(len(item[field])): in_data = [0]*5 in_data[0]=(((item['boxes'][j][0])-(item['boxes'][i][0]))/(item['boxes'][0][2])) in_data[1] = (((item['boxes'][j][1])-(item['boxes'][i][1]))/(item['boxes'][0][3])) in_data[2] = ((item['boxes'][j][2])/(item['boxes'][i][2])) in_data[3] = ((item['boxes'][j][3])/(item['boxes'][i][3])) in_data[4]=(((item['boxes'][j][2])*(item['boxes'][j][3]))/((item['boxes'][i][2])*(item['boxes'][i][3]))) final_list.append(in_data) # 每个i循环完成后,将当前i对应的子列表组存入总列表 final_list_2.append(final_list) break print(final_list_2)
如果你的需求是忽略循环维度,把所有生成的子列表统一按每3个为一组切分,可以使用列表切片实现:
# 先把所有计算得到的子列表存入全量列表all_list final_list_2 = [all_list[i:i+3] for i in range(0, len(all_list), 3)]
内容的提问来源于stack exchange,提问作者RA FI
相关产品推荐
相关产品推荐

