tuples
的list
生成组合,其中每个元组在索引0处是string
,在索引1处是list
李>params = ['sn', 'tp', 'v1', 'temp', 'slew']
list_tuple = [('Serial Number', [12345]),
('Test Points', ['TestpointA', 'TestpointC']),
('Voltage_1', [3.0, 3.3, 3.6, 0.0]),
('Temperature Setpoint', [0, 60]),
('Slew_1', [200, 400, 800, 1600, 3200, 6400])]
# working nested loop
def what_i_want(test_tuple, params):
for sn in test_tuple[0][1]:
for tp in test_tuple[1][1]:
for v in test_tuple[2][1]:
for temp in test_tuple[3][1]:
for slew in test_tuple[4][1]:
print(f'{params[0]}: ', sn)
print(f'{params[1]}: ', tp)
print(f'{params[2]}: ', v)
print(f'{params[3]}: ', temp)
print(f'{params[4]}: ', slew)
print('\n')
what_i_want(list_tuple, params)
产生所需的输出:
sn: 12345
tp: TestpointA
v1: 3.0
temp: 0
slew: 200
sn: 12345
tp: TestpointA
v1: 3.0
temp: 0
slew: 400
...
...
params
的长度对应于list_tuple
内的tuples
的数量,并且该长度可以变化,这意味着嵌套循环的变化。tuple
中每个list
的长度也可以不同(即list
与'Serial Number'
的长度可以是3或4个元素,而不是1个)
如果没有嵌套循环,如何生成所需的输出
我尝试使用递归来解包list_tuple
并通过索引调用params
,但没有成功
# not working recursive function
def not_working(list_tuple):
for i in list_tuple:
if isinstance(i, tuple):
print(i[0])
not_working(i[1])
else:
print(i)
print('\n')
not_working(list_tuple)
[out]:
Serial Number
12345
Test Points
TestpointA
TestpointC
Voltage_1
3.0
3.3
3.6
0.0
Temperature Setpoint
0
60
Slew_1
200
400
800
1600
3200
6400
您可以使用
itertools.product
:输出(前三个结果):
虽然
itertools.product
可能是这个问题最干净的解决方案,但是可以使用一个带有生成器的简单递归函数在
d
和data
之间有什么区别<在递归函数中,d
在每次迭代时通过列表切片(d[i+1:]
)进行变异。由于d
的长度减少,并且len(d)
在函数的范围内查找对象d
的长度,它将不会查找存储原始数据的列表的长度,而是查找传递给combination
的当前值的长度,该值在每次调用时都会减少输出(前三个结果):
相关问题 更多 >
编程相关推荐