python:Noob IndexError

时间:2016-03-14 10:06:33

标签: python error-handling

我目前正在尝试创建一个可以扫描字符串的代码,将每个字母的位置放在与该字母相关联的列表中(例如:如果您发现S为字符串的35,48和120个字母) ,它会将35,48和120放入字母S)的列表中。然后,它会将此列表放在字典中,作为带有S键的值。

我的问题很简单,当我尝试将值放入列表中时,我有一个IndexError:列表赋值索引超出范围,但我找不到原因。

string = "Squalalanoussommespartisetjetedteste"
taille = len(string)
dico = dict()
dico = {}
i = 0
for i in range(taille):
    if string[i] == "A" or string[i] == "a" :
        va = 0
        valA = []
        valA[va] = i
        va = va + 1
        print(valA)

我为我可怜的英语道歉,并感谢提前帮助。

6 个答案:

答案 0 :(得分:2)

在将项目推送到python中的列表时,您不需要指定索引。试试这个:

for i in range(taille):
    if string[i] == "A" or string[i] == "a" :
        valA = []
        valA.append(i)
        print(valA)

答案 1 :(得分:0)

您在这些行中收到此错误

va = 0
valA = []
valA[va] = i

valA此处为空白列表,零元素,因此当您尝试为其0索引分配值时,会引发IndexError

同样要获取每个字符的索引,您可以直接循环遍历字符串,例如

s = "Squalalanoussommespartisetjetedteste"
d = dict()
for i, c in enumerate(s):
    d.setdefault(c.lower(), []).append(i)
print d

答案 2 :(得分:0)

我在代码中发现了一些错误。

索引错误是因为您尝试调用空列表的第0个位置。

valA = []

列表为空。然后,当没有第0个位置时,你试图在第0个位置替换值

valA[va] = i

我对代码做了一些更改。在第九行中,您初始化一个空列表。你应该在for循环之前做到这一点。否则for循环每次启动它都会丢失前一循环中的值。

这是修改后的代码。

string = "Squalalanoussommespartisetjetedteste"
taille = len(string)
dico = dict()
dico = {}
i = 0
valA = []
for i in range(taille):
    if string[i] == "A" or string[i] == "a":

        valA.append(i)
        print(valA)

我得到的输出是

[3, 5, 7, 19]

答案 3 :(得分:0)

虽然您可以使用简单的方法,但Python有一些有用的模块可能有所帮助。例如

import collections
s = "Squalalanoussommespartisetjetedteste"
result = collections.defaultdict(list)
for i,char in enumerate(s):
    result[char].append(i)

result将包含一个字符串作为键的字典,并列出char的索引作为项目。

答案 4 :(得分:0)

您每次都在重新定义变量。所以将它们移出循环。

va = 0
valA = []

还使用insert方法列表。 (当你需要在列表中使用define index时可以使用insert。否则追加就足够了)

所以最终代码:

string = "Squalalanoussommespartisetjetedteste"
taille = len(string)
dico = dict()
dico = {}
i = 0

va = 0
valA = []
for i in range(taille):
    if string[i] == "A" or string[i] == "a" :
        valA.insert(va, i)
        va = va + 1
        print(valA)

答案 5 :(得分:0)

索引错误,因为数组valA是空数组,这意味着没有索引... 使用函数append并在循环外声明数组valA ...

string = "Squalalanoussommespartisetjetedteste"
taille = len(string)
dico = dict()
dico = {}
i = 0
valA = []
for i in range(taille):
    if string[i] == "A" or string[i] == "a" :
        valA.append(i)
        print(valA)