为什么在代码段中而不是在主代码块中显示“ TypeError:'int'对象不可下标”?

问题描述 投票:0回答:1

我正在尝试在Python中学习嵌套列表,问题是找到得分最高的人,该人阅读3个输入,即不。条目,学生姓名和学生分数。

我执行以下代码时,我的代码工作正常:

ns = []
for _ in range(int(input())):
   name = input()
   score = float(input())
   ns += [[name, score]]

sc = sorted(set([x[1] for x in ns]))

for name in sorted(x[0] for x in ns if x[1] == sc[1]):
   print(name)  

但是当我尝试执行该代码段时:

ns = [21,21,13,24,45,6]
sc = sorted(set([x[1] for x in ns]))
print(sc)

给我错误:

 sc = sorted(set([x[1] for x in ns]))
TypeError: 'int' object is not subscriptable

是因为代码段中的列表是整数?如果是这样,如何实现它以及为什么它在第一个代码中起作用?

python-3.x list int typeerror nested-lists
1个回答
1
投票

x中的[x[1] for x in ns]int,不能下标。相反,您可以编写[x for x in ns],不引发任何错误。请注意,这里的ns只是一个列表,而不是列表的列表。

但是,在您编写的第一段代码中,ns中定义的ns += [[name, score]]实际上是列表的列表,因此您可以使用嵌套下标,例如ns[[1]]

要对[score, name]的列表进行排序,只需在sorted上调用ns(例如ns是列表的列表):

ns = [[21, 'tom'], [21, 'john'], [13, 'ali'], [24, 'sarah']]
sorted(ns)

它将根据得分和名称,以该顺序对嵌套列表进行排序:

# [[13, 'ali'], [21, 'john'], [21, 'tom'], [24, 'sarah']]
© www.soinside.com 2019 - 2024. All rights reserved.