Python错误" Float"

时间:2014-12-05 16:41:34

标签: python

我得到TypeError:不能将序列乘以'float'类型的非int。这是我的代码:

# Define x[i][j] for Gurobi
for i in S:
    for j in D:
        decvarx[i][j] = m.addVar(lb = 0, obj=c[i][j]*u[i], vtype=GRB.CONTINUOUS, name="x.%d.%d" % (i,j))

我认为你[i]有问题,但我不太确定。这是u [i]的代码:

# u is an array of supply values (indexed on processing facility numbers).

u = []
for i in range(0,max(S)+1):
    u.append([])                            # Add an empty spot for u[i]
for row in range(0,len(FAC_data)):
    i = int(FAC_data[row][0])               # This is the processing facility number
    u[i] = 1000*FAC_data[row][2]            # This is the supply for this processing facility

感谢您提供任何帮助!!!!

1 个答案:

答案 0 :(得分:0)

我认为主要问题是您正在尝试创建一个

的整体列表
u = [123,546,887,890]

并根据您的不同设施编号编制索引。

然而,你的循环 -

for i in range(0,max(S)+1):
    u.append([])                            # Add an empty spot for u[i]

实际创建了这个:

u = [[],[],[],[]]

这是一个列表列表。因此,当您尝试乘以您认为的整数时,您实际上是在试图乘以单个元素列表。由于列表不是数组,因此您有另一种选择。与数组不同,列表是动态的。因此,您可以直接将值附加到列表中。现在,如果您的设施编号不是从零开始,我建议使用字典。

u = {}

for row in range(0,len(FAC_data)):
    key = int(FAC_data[row][0]) 
    data = 1000*FAC_data[row][2]
    u[key] = data

要检索数据供以后使用,只需使用:

needed_data = u[facility_id]

词典起初看起来很吓人,但它们是检索信息的最快方式。