如何使用复杂列表中的数字作为标题/如何仅打印与特定值匹配的列表的一部分
How do I use a number from a complex list as a heading / How do I print only part of a list that matches a certain value
我有一个包含另一个列表的复杂列表。每个列表构成一个集合的一部分(在程序的另一部分中,它一次读取 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
这被设置为一个 "History" 变量,该变量会记住所有集合及其输入,直到被清除,存储为 [[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 循环(这只会让事情变得更糟)我无法让它表现得像我期望的那样。目前我的基本代码如下。
我很确定我遗漏了一些简单的东西或使用了错误类型的 object,但对于我的生活来说,解决方案一直困扰着我并且让我发疯。
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]]
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)
这样,字典中的每个词条都是一个集合号。它包含该号码的列表列表,因此您在处理每个列表之前知道设置的号码。
您可以使用 itertools.groupby
按您的 "sets" 数字对 "inputs" 进行分组,如下所示:
from itertools import groupby
from operator import itemgetter
set_history = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]
for key, group in groupby(set_history, key=itemgetter(1)):
print(f'Starting with set {key}:')
for item in group:
print(*item[0], sep=", ")
给出:
Starting with set 1:
12, 11, 1
12, 6, 2
8, 7, 1
Starting with set 2:
6, 6, 1
使用您的方法,您可以通过临时存储完整的 "set"(此处实际上是一个列表)来解决该问题:
SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]
UnpackResults = []
Set_Number_old = 1
for Results, Set_Number in SetHistory:
if Set_Number_old == Set_Number:
UnpackResults.append(Results)
else:
print('Starting with set {}'.format(Set_Number_old))
for i, v, x in UnpackResults:
print('The Following appear:{},{},{} '.format(i, v, x))
Set_Number_old = Set_Number
UnpackResults = [Results]
print('Starting with set {}'.format(Set_Number_old))
for i, v, x in UnpackResults:
print('The Following appear:{},{},{} '.format(i, v, x))
你的 SetHistory
的形状是 (4,2)。在 for Results, Set_Number in SetHistory:
中,您只需在每次迭代中获取集合的编号,然后立即打印它。您实际上想要存储与该特定集合对应的所有结果,并在到达下一组时将其打印出来。
我建议根据您的情况使用字典(https://docs.python.org/3/tutorial/datastructures.html?highlight=dictionary 参见 5.5)。
这是我基于字典的方法:
d = dict()
for res, n in SetHistory:
d[n] = d.get(n, []) + [res]
for k, v in d.items():
print(f'set {k}:')
print(v)
# set 1:
# [[12, 11, 1], [12, 6, 2], [8, 7, 1]]
# set 2:
# [[6, 6, 1]]
我有一个包含另一个列表的复杂列表。每个列表构成一个集合的一部分(在程序的另一部分中,它一次读取 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
这被设置为一个 "History" 变量,该变量会记住所有集合及其输入,直到被清除,存储为 [[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 循环(这只会让事情变得更糟)我无法让它表现得像我期望的那样。目前我的基本代码如下。
我很确定我遗漏了一些简单的东西或使用了错误类型的 object,但对于我的生活来说,解决方案一直困扰着我并且让我发疯。
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]]
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)
这样,字典中的每个词条都是一个集合号。它包含该号码的列表列表,因此您在处理每个列表之前知道设置的号码。
您可以使用 itertools.groupby
按您的 "sets" 数字对 "inputs" 进行分组,如下所示:
from itertools import groupby
from operator import itemgetter
set_history = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]
for key, group in groupby(set_history, key=itemgetter(1)):
print(f'Starting with set {key}:')
for item in group:
print(*item[0], sep=", ")
给出:
Starting with set 1:
12, 11, 1
12, 6, 2
8, 7, 1
Starting with set 2:
6, 6, 1
使用您的方法,您可以通过临时存储完整的 "set"(此处实际上是一个列表)来解决该问题:
SetHistory = [[[12, 11, 1], 1], [[12, 6, 2], 1], [[8, 7, 1], 1], [[6, 6, 1], 2]]
UnpackResults = []
Set_Number_old = 1
for Results, Set_Number in SetHistory:
if Set_Number_old == Set_Number:
UnpackResults.append(Results)
else:
print('Starting with set {}'.format(Set_Number_old))
for i, v, x in UnpackResults:
print('The Following appear:{},{},{} '.format(i, v, x))
Set_Number_old = Set_Number
UnpackResults = [Results]
print('Starting with set {}'.format(Set_Number_old))
for i, v, x in UnpackResults:
print('The Following appear:{},{},{} '.format(i, v, x))
你的 SetHistory
的形状是 (4,2)。在 for Results, Set_Number in SetHistory:
中,您只需在每次迭代中获取集合的编号,然后立即打印它。您实际上想要存储与该特定集合对应的所有结果,并在到达下一组时将其打印出来。
我建议根据您的情况使用字典(https://docs.python.org/3/tutorial/datastructures.html?highlight=dictionary 参见 5.5)。
这是我基于字典的方法:
d = dict()
for res, n in SetHistory:
d[n] = d.get(n, []) + [res]
for k, v in d.items():
print(f'set {k}:')
print(v)
# set 1:
# [[12, 11, 1], [12, 6, 2], [8, 7, 1]]
# set 2:
# [[6, 6, 1]]