当我运行以下代码时,我得到错误'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]]
则可以使用 最佳答案
是您想要的结果:
[[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列表,而是在
survRates's
第一个元素的列表(三重嵌套!)中设置位置。因此,对于诸如survRates之类的嵌套列表,为了访问您使用的第一个列表的第一个元素:an_array[0][0][0] =
仅执行an_array[0] =
或an_array[0][0] =
会尝试设置survRates的第一个元素,而不是survRates的第一个列表或该列表的第一个元素清单。此部分生成:
[[[], [], []], [[], [], []], [[], [], []]]
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]
将返回一个列表,而不是一个元素,您可能不太希望将juvs与一个包含3个数学元素的列表相乘。更新==>
因为他们说的是,他们特别希望它在第一个数据列表中有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
关于python - Python-'float'对象不可下标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40269372/