Python中的嵌套列表排序

Python中的嵌套列表排序,python,arrays,list,Python,Arrays,List,这是一个嵌套循环的问题,我必须按字母顺序找到学生的名字,分数排在第二位。 我遇到以下错误: Traceback (most recent call last): File "solution.py", line 12, in <module> if (l[i][0]==l[0][0]): IndexError: list index out of range 我甚至打印了索引,显示值在范围内。请运行函数以查找以下输出: 4 i= 0 i= 1 i= 2 i= 3

这是一个嵌套循环的问题,我必须按字母顺序找到学生的名字,分数排在第二位。
我遇到以下错误:

Traceback (most recent call last):
  File "solution.py", line 12, in <module>
    if (l[i][0]==l[0][0]):
IndexError: list index out of range
我甚至打印了索引,显示值在范围内。请运行函数以查找以下输出:

4
i=  0
i=  1
i=  2
i=  3

如果我能从社区中得到更好的方法,我会很高兴,但我主要担心的是我得到“索引超出范围”的错误。这里似乎不正确,因为
l
,在某个时刻,元素比您预期的少。

问题是您正在从循环中删除项目。经验法则是,在对列表进行迭代时,决不能从列表中删除项目

我现在还不太理解你的代码,但是你可以改变第一个循环的方式,并对下一个循环应用相同的逻辑,至少你会得到你想要的

这里的想法是使用while语句,在每次迭代之后,您将对列表的大小进行另一次验证。同时,对于for循环,只有在第一次,因为range将返回一个列表,而for循环将只在已经创建的列表上迭代

l=list()
p=list()
q=list()
for i in range (int(raw_input())):
    p=[raw_input(),int(raw_input())]
    p.reverse()
    l.append(p)
l.sort()
print len(l)
i = 0
while i < len(l):
    print "i= ",i
    if (l[i][0]==l[0][0]):
        l.remove(l[i])
    i += 1
print l
l=list()
p=列表()
q=列表()
对于范围内的i(int(原始输入()):
p=[raw\u input(),int(raw\u input())]
p、 反向
l、 追加(p)
l、 排序()
打印透镜(l)
i=0
而我
您正在打印的是
i
,而不是
l
。不要删除循环中的元素,但在执行删除之前,行中会出现错误,即在执行删除时,行中会出现第12行错误13@DhrubKumar是的,但请记住,你处于一个循环中
l=list()
p=list()
q=list()
for i in range (int(raw_input())):
    p=[raw_input(),int(raw_input())]
    p.reverse()
    l.append(p)
l.sort()
print len(l)
i = 0
while i < len(l):
    print "i= ",i
    if (l[i][0]==l[0][0]):
        l.remove(l[i])
    i += 1
print l