Python-';浮动';对象不可下标

Python-';浮动';对象不可下标,python,floating-point,Python,Floating Point,当我运行下面的代码时,我得到了错误“float”对象不可下标:我相信错误发生了,因为我正在使用它们的列表位置输入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 = [] fo

当我运行下面的代码时,我得到了错误“float”对象不可下标:我相信错误发生了,因为我正在使用它们的列表位置输入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(第一个元素),但不是survrate列表,而是
survrate的列表中的列表(三重嵌套!)。因此,对于像survrate这样的嵌套列表,为了访问您使用的第一个列表的第一个元素:
an_数组[0][0][0]=
只要执行
an_数组[0]=
an_数组[0][0]=
就会尝试将survrate的第一个元素设置为非survrate的第一个列表或该列表的第一个列表

此部分生成:
[[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]、[]]]

def gens():
    for i in range(totalGens):
        dataSet = []
        for j in range(3):
            dataSet.append([])
        newList.append(dataSet)
    print(newList)
如果你需要更多的帮助,请更深入地解释发生了什么

新成年人=绝对值*绝对值[0][0]

拥有一个硬编码的
survRates[0][0]
将返回一个列表,而不是一个可能不太可能的元素,您可能希望将juv与一个包含3个数学元素的列表相乘,您可能希望
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][0] = 1.5
 survRates[0][1] = 3.5
 survRates[0][2] = 2.5

您的问题似乎是如何初始化
survrate

首先,创建一个三个元素长的列表,每个元素都是一个空列表

    survRates = [[],[],[]]
这意味着:

  survRates[0] = []
接下来,列表中的每个元素都从一个列表更改为一个float,而不是将float元素追加到列表中

  survRates[0] = 1.5

创建
survRates=[[1.5]、[3.5]、[2.5]]
survRates[0]=1.5
更改为
survRates[0]。附加(1.5)
。这会将数字追加到空列表中。

我想将值1.5、3.5和2.1输入附件中,如
[[1.5、3.5、2.1]、[]、[]、[]、[]、[]、[]、[]、[]、[]。
。我认为这两个问题是相互关联的,但为什么数据结构如此不平衡呢?有时候你想要一个包含3个元素的列表,而有时候你想要一个包含3个元素的列表?你确定可能不喜欢字典吗?比如:
survRates.adultRates=[1.5,3.5,2.1]
或者其他什么,然后用另一个键
survRates.unknownKey=[],[],[],[]
看起来它会让你不那么经常困惑。记住嵌套的频率:无论哪种方式,gens()代码都会生成一个平衡的列表,因为它是在一个简单的循环中生成的。。。如果您确实希望列表中的第一个元素是特殊的,请将其从该循环中排除。很抱歉造成混淆。我最终使用了一个简单的循环,就像我的gens代码一样,它似乎可以工作。无论如何谢谢你的帮助
    survRates = [[],[],[]]