Python列表切片错误

时间:2017-05-14 21:24:08

标签: python list

我正在使用此代码:https://pastebin.com/mQkpxdeV

    wordlist[overticker] = thesentence[0:spaces]

在这个函数中:

def mediumparser(inpdat3):
    spaceswitch = 0
    overticker = 0
    thesentence = "this sentence is to count the spaces"
    wordlist = []
    while spaceswitch == 0:
        spaces = thesentence.find(' ')
        wordlist[overticker] = thesentence[0:spaces] # this is where we save the words at
        thesentence = thesentence[spaces:len(thesentence)] # this is where we change the sentence for the
                                                            # next run-through
        print('here2')
        print(wordlist)

我无法弄清楚为什么它只是说列表索引超出范围。

该程序似乎有效,但它出错了,我做错了什么?我看了Mark Lutz的这本书给出了答案,我找不到答案。

2 个答案:

答案 0 :(得分:1)

"列表索引超出范围"问题是从不与列表拼接,如这个简单的测试所示:

>>> l = []
>>> l[0:1200]
[]
>>> l[-400:1200]
[]

所以问题出在左手分配wordlist[overticker]上,它使用了一个列表访问,而不是切片,并且哪个列表索引超出范围"。

您的代码中只有4行足以找到问题

wordlist = []
while spaceswitch == 0:
    spaces = thesentence.find(' ')
    wordlist[overticker] = ...

wordlist只是空的。您必须扩展/附加列表(如果您想根据键动态创建项目,则使用字典)

答案 1 :(得分:1)

而不是将wordlist[overticker]wordlist作为空列表,而是需要使用append,因为索引空列表是没有意义的。

wordlist.append(thesentence[0:spaces])

或者,您可以使用20个空字符串预启动列表。

wordlist = [""]*20  
wordlist[overticker] = thesentence[0:spaces]

P.S。

wordlist[overticker]称为索引,wordlist[1:10]称为切片。