首页 > 解决方案 > 如何使用复杂列表中的数字作为标题/如何仅打印与某个值匹配的列表的一部分

问题描述

我有一个包含另一个列表的复杂列表。每个列表构成一组的一部分(在程序的另一部分中,它一次读取 3 个值,如果您有 2 个负载的 3 个值,那么它会将它们分别设置在一个集合中。例如,在我的第一组下面输入是:

12, 11, 1
12, 6, 2
8, 7, 1

然后我的第二组输入是:

6, 6, 1

如此有效地,每个输入都将是一组的一部分:

Set 1:
12, 11, 1
12, 6, 2
8, 7, 1

Set 2:
6, 6, 1

这被设置为一个“历史”变量,该变量会记住所有集合及其输入,直到被清除,存储为 [[inputs]setnumber] 其中外部项目是集合编号,内部项目是在该集合上接收到的输入:

[[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
Starting with set 1
The Following appear:8,7,1
Starting with set 2
The Following appear:6,6,1

无论我多么努力,或者我玩了多少次 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} ')

标签: pythonpython-3.xlistloopsnested-lists

解决方案


让我们用字典来解决这个问题。

SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]

set_dict = {}
for Results, Set_Number in SetHistory:
    if Set_Number in set_dict: 
        set_dict[Set_Number].append(Results)
    else:
        set_dict[Set_Number] = [Results]
for a_set in sorted(set_dict): 
    print('Set '+str(a_set))
    for val_list in set_dict[a_set]:
        print(*val_list)

这样,字典中的每个条目都是一个集合编号。它包含该号码的列表列表,因此您在处理每个列表之前知道设置的号码。


推荐阅读