我有一份清单,其中包含以下项目:
initl = [1, 2, 3, 4]
和stepsize
,即stepsize = 0.05
。列表中的每个值都允许stepsize
向上或向下更改。我想创建的是一个列表列表,其中包含向上、向下或初始值的所有组合,例如:
result_list = [[1, 2, 3, 4], [1.05, 2, 3, 4], [0.95, 2, 3, 4], [1, 2.05, 3, 4], ...]
列表中组合的顺序并不重要
我想到了这个:
import itertools
initl = [1, 2, 3, 4]
stepsize = 0.05
lu = [i + stepsize for i in initl]
ld = [i - stepsize for i in initl]
l_map = list(itertools.product(range(3), repeat=4))
result_list = []
for i in l_map:
l_new = []
for pos, j in enumerate(i):
if j == 0:
l_new.append(ld[pos])
elif j == 1:
l_new.append(initl[pos])
else:
l_new.append(lu[pos])
result_list.append(l_new)
它产生所需的输出。列表长度:3^4=81。 但我想知道是否有更好的方法。这里嵌套的for循环对我来说特别笨重。谢谢你的帮助
您可以尝试如下列表理解:
zip
使用initl
对product
进行理解:尝试:
对于您的输入数据输出:
您的想法是正确的,基本上是自己实现^{} ,用于一个3选择的案例
您可以直接在包含每个值的所有选项元组的列表上使用
itertools.product
进行简化,如下所示:输出:
相关问题 更多 >
编程相关推荐