Python 3.x 为什么它会显示;类型错误:';int';对象不可下标";在代码段中,但不在主代码块中?
我试图学习Python中的嵌套列表,问题是找到得分第二高的人,阅读3个输入,即条目数量、学生姓名和学生分数 在执行以下操作时,我的代码工作正常: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
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']]