运行以下代码时出现错误'float' object is not subscriptable
:我认为错误发生,因为我使用列表位置输入surRates的值。
survRates = [[],[],[]]
newList = []
totalGens = 3
survRates[0] = 1.5
survRates[1] = 3.5
survRates[2] = 2.5
def gens():
for i in range(totalGens):
dataSet = []
for j in range(3):
dataSet.append([])
newList.append(dataSet)
print(newList)
def adultCalc(juvs):
newAdults = juvs * survRates[0][0]
return newAdults
def senCalc(adults,sens):
newSens = round((adults* survRates[1][0]) + (sens* survRates[2][0]),2)
return newSens
generations()
newList[0][0] = 3.5
newList[0][1] = adultCalc(3)
newList[0][2] = senCalc(6,3)
print(newList)
当我通过将代码更改为survRates = [[1.5],[3.5],[2.5]]
而不是初始化变量来运行相同的代码时,它可以正常工作。
survRates[0] = 1.5
survRates[1] = 3.5
survRates[2] = 2.5
我想要的结果是:[[1.5, 3.5, 2.1], [[], [], []], [[], [], []]]
,如果我使用survRates = [[1.5],[3.5],[2.5]]
答案 0 :(得分:1)
是您想要的结果:
[[1.5, 3.5, 2.1], [[], [], []], [[], [], []]]
?
或者是吗?
[[[1.5], [3.5], [2.1]], [[], [], []], [[], [], []]]
?
因为第二个数据结构与您想要的数据结构相同。
然后你不需要这样做:
survRates[0] = 1.5
survRates[1] = 3.5
survRates[2] = 2.5
取而代之的是:
survRates[0] = []
survRates[0][0] = 1.5
survRates[0][1] = 3.5
survRates[0][2] = 2.5
或者因为你有非常具体的要求:看起来你的问题中有一个拼写错误:这可能是你真正想要的。
survRates = [[[], [], []], [[], [], []], [[], [], []]]
survRates[0][0][0] = 1.5
survRates[0][0][1] = 3.5
survRates[0][0][2] = 2.5
这样每个数组都只是一个只有一个元素的数组...因为我确定了邪恶的目的。
您没有准确描述您想要的内容:
你想在列表中设置位置0(第一个元素)而不是幸存者列表,而是在survRates's
第一个元素的列表中设置列表(三重嵌套!)。因此,对于像幸存者这样的嵌套列表,为了访问您使用的第一个列表的第一个元素:an_array[0][0][0] =
只需执行an_array[0] =
或an_array[0][0] =
将尝试设置幸运率的第一个元素而不是幸存率&# 39;第一个列表或该列表的第一个列表。
此部分生成:[[[], [], []], [[], [], []], [[], [], []]]
def gens():
for i in range(totalGens):
dataSet = []
for j in range(3):
dataSet.append([])
newList.append(dataSet)
print(newList)
如果您需要进一步的帮助,请在此处解释更深入的内容。
newAdults = juvs * survRates [0] [0]
拥有一个硬编码的survRates[0][0]
将返回一个列表,而不是一个元素可能不太可能你想用一个包含3个数学元素的列表乘以juv,你可能想要survRates[0][0][0]
。
更新==> 因为他们说他们特别希望它在第一个数据列表中有1个数组,在每个后续数据列表中有3个数组:
应该修改gens()函数:
def gens():
for i in range(totalGens):
dataSet = []
for j in range(3):
if i > 0:
dataSet.append([])
newList.append(dataSet)
print(newList)
现在我们将有=>
[[], [[], [], []], [[], [], []]]
在帖子开头的这部分仍然会出错:
survRates[0] = 1.5 survRates[1] = 3.5 survRates[2] = 2.5
但是工作是:
survRates[0][0] = 1.5
survRates[0][1] = 3.5
survRates[0][2] = 2.5
答案 1 :(得分:0)
您的问题似乎是如何初始化survRates
。
首先,创建一个长三个元素的列表,每个元素都是一个空列表。
survRates = [[],[],[]]
这意味着:
survRates[0] = []
接下来,列表的每个元素都从列表更改为float,而不是将float元素附加到列表中。
survRates[0] = 1.5
创建survRates = [[1.5],[3.5],[2.5]]
将survRates[0] = 1.5
更改为survRates[0].append(1.5)
。这会将数字附加到空列表中。