当我运行以下代码时,我得到错误'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/

10-10 01:21