【问题标题】:strange python index out of range奇怪的python索引超出范围
【发布时间】:2016-07-20 22:48:40
【问题描述】:

我的 python 代码有一个奇怪的问题

当我测试它时:

4
Prashant
32
Pallavi
36
Dheeraj
39
Shivam
40

效果很好,但是当我尝试用这个测试它时:

5
Harry
37.21
Berry
37.21
Tina
37.2
Akriti
41
Harsh
39

失败并出现此错误:

运行时错误 回溯(最近一次通话最后): 文件“solution.py”,第 48 行,在 最终 = 查找(嵌套,查找(嵌套,最小(嵌套))[0][1]) IndexError: 列表索引超出范围

这是代码,我不明白它为什么会崩溃,我尝试了很多不同的解决方案但没有任何结果..

def compteur (list,sch):
    nb=0
    for t in list:
        if t[1] == sch:
            nb += 1
    return nb

def minimum (list):
    minim = list[0][1]
    for t in list :
        if t[1] < minim :
            minim = t[1]
    return minim

def find (list,sch):
    ret=[]
    for t in list:
        if t[1] == sch:
            ret.append(t)
        return ret

def rmv (list,sch):
    ret = []
    fd = find(list,sch)
    for t in list :
        if not fd[0][1]==t[1]:
            ret.append(t)
    return ret

nested = [] 
number = int(raw_input())

for i in range(number+1) :
    try:
        nom = raw_input()
    except (EOFError):
        break
    note = float(raw_input())
    nested.append([nom,note])

mini = find(nested,minimum(nested))
for i in mini:
    nested = rmv(nested,i[1])


final = find(nested,find(nested,minimum(nested))[0][1])
final.sort(key=str)

for e in final :
    print e[0]

感谢您的帮助!

【问题讨论】:

  • 您可以将该陈述分成几个较小的陈述并缩小问题范围。
  • 我在您的代码中添加了print find(nested,minimum(nested)),它打印了[]。您的问题可能出在find,我不禁注意到您的退货位置很奇怪。
  • 如果你只是在find 中删除return 语句(现在它在循环中返回,所以你只处理一个条目)它可以工作。

标签: python indexing range


【解决方案1】:

对您的函数进行单元测试或至少添加一些打印语句以查看它们返回的内容是值得的。我加了

print find(nested,minimum(nested))

打印出来的

[]

find 未按您希望的方式工作,经过检查,for 循环中的 return 语句似乎有问题。这使它工作

def find (list,sch):
    ret=[]
    for t in list:
        if t[1] == sch:
            ret.append(t)
    return ret

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-02
    • 2014-11-02
    相关资源
    最近更新 更多