' IndexError:列表索引超出范围'按数字排序时

时间:2015-01-29 10:08:07

标签: python sorting numbers python-3.3

我有一些代码,它的功能是读取名为' class1results.txt'的文件,并在shell中以数字方式打印信息。当我运行代码时,当文件被排序时,会出现此错误:IndexError: list index out of range我已经完成了脚本,我还没有看到我出错的地方,有人修复了吗?

以下是文本文件的内容:

`Ryan | 7`
`Daniel | 8`
`Joe | 10`
`Anna | 6`
`Cameron | 5`
`Mark | 3`
`Beth | 5`

以下是代码:

def numberSort1 ():
      s=open('class1results.txt','r').read()
      l=s.split('\n')
      print('Here are the results in numerical order: ')
      print (('\n').join(sorted(l,key=lambda x : int(x.split('|')[1].strip()))))
      ask()

  question = input("Which group do you want to sort? 1, 2 or 3? ")
  if question == "1":
    numberSort1()

非常感谢所有帮助!

2 个答案:

答案 0 :(得分:0)

更改行

l=s.split('\n')

l = s.splitlines()

前者在列表l的最后一项中包含空字符串,而后者则不包括。所以,将代码更改为:

def numberSort1 ():
      l = open('class1results.txt','r').read().splitlines()
      print('Here are the results in numerical order: ')
      print (('\n').join(sorted(l,key=lambda x : int(x.split('|')[1].strip()))))
#      ask()

numberSort1()

class1results.txt包含

Ryan | 7
Daniel | 8
Joe | 10
Anna | 6
Cameron | 5
Mark | 3
Beth | 5

以下输出没有错误:

Here are the results in numerical order: 
Mark | 3
Cameron | 5
Beth | 5
Anna | 6
Ryan | 7
Daniel | 8
Joe | 10

答案 1 :(得分:0)

这是否可以通过任何机会修复您的代码(使用条件if '|' in x else '')?

def numberSort1 ():
    s=open('class1results.txt','r').read()
    l=s.split('\n')

    print('Here are the results in numerical order: ')
    print (('\n').join(
        sorted(l,key=lambda x : int(x.split('|')[1].strip()) if '|' in x else '')
    ))
    ask()

question = input("Which group do you want to sort? 1, 2 or 3? ")
if question == "1":
    numberSort1()