【问题标题】:TypeError: tuple indices must be integers or slices, not listTypeError:元组索引必须是整数或切片,而不是列表
【发布时间】:2021-06-26 23:32:34
【问题描述】:

我正在尝试创建格式化打印,并且收到此错误输出。我对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

【问题讨论】:

  • for i in avgIris:中的i是元组avgIris的一个元素。元组的每个元素都是一个列表,所以将列表作为一个元组的索引基本上是不正确的,是错误所传达的内容。
  • @tidakdiinginkan 啊谢谢!有什么比使用 i 更好的方式来运行元组?
  • 这段代码可以做几个更正,首先,我会说,setosa.append(['Setsota']) 基本上给你这个 --> [['Setosa']],基本上是一个列表列表,我认为您不一定需要仅查看上面的 sn-p。您可以简单地替换 append,而是说 setosa = ['Setsota',avgPetal_lengthS,avgPetal...
  • 好的,一旦你对所有 3 个变量(setosa、versicolor 和 virginia)进行了上述更正,你就可以将你的 if 循环更改为 for i in zip(setosa, versicolor, virginia): 然后 rec = f"{i[0]:11s}{gap}...
  • @tidakdiinginkan 哦哦哦!!谢谢!我要试试!

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


【解决方案1】:

您将项目与 avgIris 中的索引混淆了。任何一个都可以,但是项目=里面的列表,索引=指向哪个列表的指针。另外,通常我会为此使用列表而不是元组。您可以使用其中任何一个替换代码 sn-ps 来获得您想要的 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}"


【讨论】:

    猜你喜欢
    • 2017-10-02
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多