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