如何从嵌套列表提取编号为标题并按集合分组打印列表内容
问题:按集合分组打印嵌套列表数据
我有一个存储在SetHistory变量中的嵌套列表数据,格式为[[输入列表], 集合编号],示例数据如下:
SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]
我的需求是按集合编号分组打印,输出格式如下:
Starting with set 1: 12, 11, 1 12, 6, 2 8, 7, 1 Starting with set 2: 6, 6, 1
但当前的代码会重复打印每个子列表对应的集合标题,输出变成了:
Starting with set 1 The Following appear:12,11,1 Starting with set 1 The Following appear:12,6,2...
我尝试过用if语句、while循环都没解决,现有代码如下:
SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]] for Results, Set_Number in SetHistory: UnpackResults = [Results] UnpackSet = [Set_Number] for i in UnpackSet: print(f'Starting with set {Set_Number}') for i, v, x in UnpackResults: print(f'The Following appear:{i},{v},{x} ')
请帮忙实现正确的分组打印格式。
解决方案
核心思路是先按集合编号把数据分组,然后再遍历每个分组统一打印标题和对应的所有子列表,这样就不会重复输出标题了。这里可以用字典来存储分组后的结果,键是集合编号,值是该集合下的所有输入列表。
修正后的代码如下:
SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]] # 第一步:按集合编号分组数据 grouped_data = {} for results, set_num in SetHistory: # 如果集合编号不在字典里,先创建一个空列表 if set_num not in grouped_data: grouped_data[set_num] = [] # 将当前结果添加到对应集合的列表中 grouped_data[set_num].append(results) # 第二步:遍历分组后的数据,按要求格式打印 for set_num, results_list in sorted(grouped_data.items()): # 把每个子列表转换成逗号分隔的字符串,再用空格连接起来 formatted_results = " ".join([", ".join(map(str, res)) for res in results_list]) print(f'Starting with set {set_num}: {formatted_results}')
代码解释:
- 分组数据:用字典
grouped_data把同一个集合编号的所有输入列表收集到一起,比如集合1对应的列表就是[[12,11,1], [12,6,2], [8,7,1]]。 - 格式化输出:
- 用
map(str, res)把列表里的数字转成字符串,再用", ".join()拼成逗号分隔的格式; - 再用
" ".join()把所有子列表的字符串用空格连接起来; - 最后按照要求的格式打印标题和拼接好的结果。
- 用
运行这段代码后,就能得到你想要的输出:
Starting with set 1: 12, 11, 1 12, 6, 2 8, 7, 1 Starting with set 2: 6, 6, 1
内容的提问来源于stack exchange,提问作者Llew
相关产品推荐
相关产品推荐

