2016-03-14 2 views
-1

В настоящее время я пытаюсь создать код, который может сканировать строку, поместить позицию каждой буквы в список, связанный с буквой (например: если вы найдете S как 35, 48 и 120 буквой строки, он будет помещать 35, 48 и 120 в список для буквы S). Затем он помещает этот список в словарь как значение с ключом S.python: Noob IndexError

Моя проблема проста, у меня есть индекс 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) 

Прошу прощения за мой бедный английский и благодарю вас за помощь.

+0

Вы пытаетесь получить доступ к элементу 0 в пустом списке => IndexError. Используйте valA.append (i), который добавит другой элемент в ваш список (в конце), и вам не нужно поддерживать индекс va в коде. – poko

+0

Ну, это просто сделать список одним элементом, а затем стереть прежний. Может, я сделал что-то не так? –

+0

О, боже мой, ты просто взорвал мой разум названием этого вопроса. Было бы так здорово, если бы определенные ошибки (не обязательно простые) назывались NoobIndexError и т. П. Если я когда-либо напишу язык программирования, ожидаем, что вас встретят предупреждения о NoobErrors. Серьезно, что может быть более смешным, чем грубый интерпретатор/компилятор. Также решения будут легко найти в сети: D Спасибо, Раэган, вы сделали мой день. PS. @AbishekKushnoor имеет для вас ответ, кроме put 'valA = []' вне цикла for:) – Born2Smile

ответ

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

Вам не нужно указать индекс, выдвигая элемент в список в Python. Попробуйте следующее:

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

Я пробовал это, но он говорит мне, что в объекте списка нет атрибута push. –

0

Я нашел некоторые ошибки в коде.

Ошибка индекса потому, что вы пытались вызвать 0-ю позицию пустого списка.

valA = [] 

Список пуст. Тогда вы пытались заменить значение на 0-й позиции, когда нет 0th позиция

valA[va] = i 

Я сделал некоторые изменения в код. В девятой строке вы инициализируете пустой список. Вы должны сделать это до цикла. В противном случае цикл запускается каждый раз, и вы теряете значение в предыдущем цикле.

здесь измененный код.

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] 
0

Хотя вы можете использовать простой подход, Python имеет некоторые модули Usefull, которые могут помочь. Например

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

result будет содержать словарь с символами строки в качестве ключей и списков, если это индексы Чара как элементы.

0

Вы переопределяете переменные ниже каждого раза. Поэтому переместите их из цикла.

va = 0 
valA = [] 

Также используйте метод вставки для списка. (Вы можете использовать вставку, когда вам нужно использовать индекс определения в списке.в противном случае Append достаточно)

так окончательный код:

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) 
0

ошибка индекс, так как массив Вал пустой массив, это означает, что нет индексов ... использования функции Append и объявить массив Вал вне цикла ...

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)