类型错误:元组索引必须是整数或切片,而不是列表

时间:2021-06-26 23:32:34

标签: python python-3.x list formatting tuples

我正在尝试创建格式化的打印件,但收到此错误输出。我对python相当陌生,使用python3.x,所以任何输入都将不胜感激!谢谢!!

avgPetal_widthS = Average(petal_widthS)
avgPetal_widthVe = Average(petal_widthVe)
avgPetal_widthVi = Average(petal_widthVi)
avgPetal_lengthS = Average(petal_lengthS)
avgPetal_lengthVe = Average(petal_lengthVe)
avgPetal_lengthVi = Average(petal_lengthVi)
avgSepal_widthS = Average(sepal_widthS)
avgSepal_widthVe = Average(sepal_widthVe)
avgSepal_widthVi = Average(sepal_widthVi)
avgSepal_lengthS = Average(sepal_lengthS)
avgSepal_lengthVe = Average(sepal_lengthVe)
avgSepal_lengthVi = Average(sepal_lengthVi)

setosa = []
versicolor = []
virginica = []

setosa.append(['Setsota',avgPetal_lengthS,avgPetal_widthS,avgSepal_lengthS,avgSepal_widthS])
versicolor.append(['Versicolor',avgPetal_lengthVe,avgPetal_widthVe,avgSepal_lengthVe,avgSepal_widthVe])
virginica.append(['Virginica',avgPetal_lengthVi,avgPetal_widthVi,avgSepal_lengthVi,avgSepal_widthVi])

avgIris = (
    ['Setsota',avgPetal_lengthS,avgPetal_widthS,avgSepal_lengthS,avgSepal_widthS], 
    ['Versicolor',avgPetal_lengthVe,avgPetal_widthVe,avgSepal_lengthVe,avgSepal_widthVe],
    ['Virginica',avgPetal_lengthVi,avgPetal_widthVi,avgSepal_lengthVi,avgSepal_widthVi])

gap = ' '*3
heading = f"{'Species:':11s}{gap}{'Petal Length':12s}{gap}{'Petal Width':11s}{gap}{'Sepal Length':12s}{gap}{'Sepal Width':11s}"
print("\n")
print("="*69)
print(heading)
print("-"*69)
print("Attributes (cm):")
for i in avgIris:
    rec = f"{avgIris[i][0]:11s}{gap}{avgIris[i][1]:12f}{gap}{avgIris[i][2]:11f}{gap}{avgIris[i][3]:12f}{gap}{avgIris[i][4]:11f}"
print(rec)

我收到的错误特别与 rec= 部分有关,我试图将元组浮点数隔开。

错误是:

=====================================================================
Species:      Petal Length   Petal Width   Sepal Length   Sepal Width
---------------------------------------------------------------------
Attributes (cm):
Traceback (most recent call last):
  File "/Users/meikebuettner/hello/a5_mbuettner/a5_mbuettner2017.py", line 90, in <module>
    rec = f"{avgIris[i][0]:11s}{gap}{avgIris[i][1]:12f}{gap}{avgIris[i][2]:11f}{gap}{avgIris[i][3]:12f}{gap}{avgIris[i][4]:11f}"
TypeError: tuple indices must be integers or slices, not list

1 个答案:

答案 0 :(得分:1)

您将 avgIris 中的项目与索引混淆了。任何一个都有效,但项目 = 里面的列表,索引 = 指向哪个列表的指针。另外,通常我会为此使用列表而不是元组。您可以使用这些替换代码片段中的任何一个来获取所需的 rec。使用 item 较短,因此您可能更喜欢它。

for i in range(len(avgIris)):
    rec = f"{avgIris[i][0]:11s}{gap}{avgIris[i][1]:12f}{gap}{avgIris[i][2]:11f}{gap}{avgIris[i][3]:12f}{gap}{avgIris[i][4]:11f}"

for item in avgIris:
    rec = f"{item[0]:11s}{gap}{item[1]:12f}{gap}{item[2]:11f}{gap}{item[3]:12f}{gap}{item[4]:11f}"