在我的代码中获取列表分配索引超出范围

时间:2014-07-30 03:39:34

标签: python python-2.7

我正在尝试为现有列表中的某个位置分配值,但我一直认为我的索引超出了范围。可能是一些愚蠢但我已经尝试了2个小时。

这是我的代码(我从最后一行收到错误:

test="2000 and was not However, implemented 1998 it until;9 8 3 4 1 5 7 2"
saver=[]
text=""
textList=[]
positionList=[]
num=0

for l in test.strip().split(";"):
    saver.append(l)
print saver
for i in saver[0].split(" "):
    textList.append(i)
print textList
for j in saver[1].split(" "):
    positionList.append(j)
print positionList

accomodator=[]*len(textList)

for n in range(1,len(textList)):
    n=int(n)
    if n not in positionList:
        accomodator[n-1]=textList[n-1]

我仍然没有使用过一些变量,但我已经声明了它们,所以请忽略它们。

提前致谢!

2 个答案:

答案 0 :(得分:2)

你的问题就在这一行:

accomodator=[]*len(textList)

因为空列表乘以任何数字都是空列表:

>>> [] * 10
[]

您可以使用默认值初始化每个元素:

>>> [None] * 10
[None, None, None, None, None, None, None, None, None, None]

所以代码的修复是:

accomodator=[None]*len(textList)

当然,0-1或您喜欢的任何其他值也可以正常使用。

答案 1 :(得分:0)

accomodator的长度为零。它会给出索引错误。

试试这个:

accomodator=[]*len(textList)
#print str(len(accomodator)) + " "+str(len(textList))
i = 0;
while i<len(textList):
    accomodator.append([])
    i +=1

创建accomodator后,增加其长度。或者,如果您知道增加其长度的效率,则可以使用它。