Python IndexError string index out of range Beginner

2024-10-01 02:28:11 发布

您现在位置:Python中文网/ 问答频道 /正文

所以对于一个编程任务,我们必须用python重写sort函数来对单词列表进行排序。到目前为止,我已经使它能够根据每个单词的第一个字母对单词进行排序,现在我试着运行递归,以便在第一个字母或任何一个字母相同的情况下仍然对其进行排序。我遇到了“索引器错误:字符串索引超出范围”错误。到目前为止我得到的是

def insertion_sort(bookwords):
    for index in range(1,len(bookwords)):
        global word
        word=bookwords[index]
        i=index-1
        word_checker(bookwords, 0, i)

def word_checker(bookwords, num, i):
    while i>=0:
        wordleft=bookwords[i]
        if ord(word[num])<ord(wordleft[num]):
            bookwords[i+1]=bookwords[i]
            bookwords[i]=word
            i=i-1
        elif ord(word[num])==ord(wordleft[num]):
            num=num+1
            word_checker(bookwords, num, i)
        else:
            break


bookwords=["michael", "maddy", "michelle", "monstor", "money", "mountain", "miniscus", "mega"]

insertion_sort(bookwords)

print bookwords

我猜num正在变得比单词更大,但是当字母arn不一样的时候,它运行了很多次而没有停止,所以我有点困惑它为什么这么做。任何帮助都将不胜感激

更新

好了,现在它可以工作了,但是当我把它放到提供的代码中测试它有多快,大约700000个单词,它持续了30+,直到我停止它,因为sort函数花了5秒。这是我的代码

^{pr2}$

Tags: 函数index排序def错误字母checkersort
2条回答

几件事:

  • pythonzero索引字符串(因此从0到len(string)-1)。 以及
  • 考虑使用“for”来浏览每个字母。在

你必须改变这一点:

 elif ord(word[num])==ord(wordleft[num]):
     num=num+1
     word_checker(bookwords, num, i)
 else:

收件人:

^{pr2}$

然后它将打印:['maddy', 'mega', 'money', 'michael', 'michelle', 'miniscus', 'monstor', 'mountain']

无论如何,我看不出递归的意义,我认为插入排序不做递归。在

更新

当按字符比较时,算法被破坏,但是python可以为您比较字符串,因此这将给出正确的结果:

def insertion_sort(bookwords):
    for index in range(1,len(bookwords)):
        global word
        word=bookwords[index]
        i=index-1
        word_checker(bookwords, i)

def word_checker(bookwords,  i):
    while i>=0:
        wordleft=bookwords[i]
        if word<wordleft:
            bookwords[i+1]=bookwords[i]
            bookwords[i]=word
        i=i-1

bookwords=["michael", "maddy", "michelle", "monstor", "money", "mountain", "miniscus", "mega"]
insertion_sort(bookwords)
print bookwords #prints ['maddy', 'mega', 'michael', 'michelle', 'miniscus', 'money', 'monstor', 'mountain']

相关问题 更多 >