Python 3.x 为什么它会显示;类型错误:';int';对象不可下标";在代码段中,但不在主代码块中?

Python 3.x 为什么它会显示;类型错误:';int';对象不可下标";在代码段中,但不在主代码块中?,python-3.x,list,int,typeerror,nested-lists,Python 3.x,List,Int,Typeerror,Nested Lists,我试图学习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 i

我试图学习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
是因为代码段中的列表是整数吗?
如果是,如何实现这一点,以及为什么它在第一个代码中工作?
[x[1]中的
x
对于ns中的x]
是一个
int
且不可下标。相反,您可以编写不抛出错误的
[x for x in ns]
。请注意,
ns
这里只是一个列表,而不是列表列表

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

要对
[score,name]
s列表进行排序,只需在
ns
上调用
sorted
(其中
ns
是一个列表示例):

它将根据分数和名称按以下顺序对嵌套列表进行排序:

# [[13, 'ali'], [21, 'john'], [21, 'tom'], [24, 'sarah']]

@LogicalDelay请查看我更新的答案,如果您觉得有帮助,请单击旁边的绿色复选标记接受答案。
# [[13, 'ali'], [21, 'john'], [21, 'tom'], [24, 'sarah']]