我正在尝试在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
中的[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']]