我有一个带3个参数的函数。我想计算该函数并输出每个参数组合的结果。
我已经定义了我的函数F(A,B,C)
,现在我们可以假设它的输出是单个值f(A,B,C)
。
然后我运行一个嵌套循环:
for A in range(1,2):
for B in range(4,5):
for C in range(7,8,9):
F(A,B,C)
但它超越了。我想得到的是这样的数据帧:
A B C Output
1 4 7 f(1,4,7)
1 4 8 f(1,4,8)
1 4 9 f(1,4,9)
1 5 7 f(1,5,7)
1 5 8 f(1,5,8)
1 5 9 f(1,5,9)
2 4 7 f(2,4,7)
2 4 8 f(2,4,8)
2 4 9 f(2,4,9)
2 5 7 f(2,5,7)
2 5 8 f(2,5,8)
2 5 9 f(2,5,9)
答案 0 :(得分:4)
range(x,y)
不包含值y
例如range(1,3)
包含数字[1,2]
不 [1,2,3]
for A in range(1,3):
for B in range(4,6):
for C in range(7,10):
print(A,B,C)
输出:
1 4 7
1 4 8
1 4 9
1 5 7
1 5 8
1 5 9
2 4 7
2 4 8
2 4 9
2 5 7
2 5 8
2 5 9
这是你的范围正在做什么
range(1,2)
- > [1] range(4,5)
- > [4] range(7,8,9)
- > [7](这个甚至更糟糕,因为第三个参数是步长值)正如你所看到的,你只是创建了只有一个项目的3个范围,所以当你循环时它永远不会像你想要的那样重复,因为每个范围只有一个值
这就是为什么你的程序输出(1,4,7)然后终止,如果你改变F打印。在我的示例中,我将每个范围的第二个参数增加1 以获得所需的结果。
将其设为数据框:
listData = []
for A in range(1, 3):
for B in range(4, 6):
for C in range(7, 10):
listData.append([A,B,C, A+B+C]) #I just used A+B+C instead of the func f
df = pandas.DataFrame(columns = ["A", "B", "C", "Output"], data = listData)
print(df)
答案 1 :(得分:0)
我的建议是使用itertools.product
import itertools
import pandas
# Assumes you know the inputs
A = [1, 2]
B = [4, 5]
C = [7, 8, 9]
# args = list(itertools.product(A, B, C))
args = [list(x) for x in itertools.product(A, B, C)]
def my_func(arg1, arg2, arg3):
return arg1 + arg2 + arg3
正如您所看到的,上面的代码可以防止您使用嵌套循环。
您现在可以执行以下操作:
for arg in args:
arg.append(my_func(*arg))
df = pandas.DataFrame(args, columns=['A', 'B', 'C', 'SUM'])