Создание пустого списка для последующего назначения данных - PullRequest
3 голосов
/ 15 ноября 2010

Допустим, я хочу создать список имен

listOfNames = []

Затем у меня есть цикл while, такой как

count = 0
while listOfNames[count] < 10:
    nameList[count] = raw_input("Enter a name: ")
    count += 1

Python говорит, что индекс списка находится вне диапазона, но индекс списка должен быть в 0, правильно?

Как добавлять в список каждый раз, когда выполняется цикл while?Я предполагаю, что с моим списком что-то не так.

Ответы [ 4 ]

11 голосов
/ 15 ноября 2010

Пустой список еще не имеет индекса, это пустой список!Если вы хотите заполнить его, вы должны сделать что-то вроде этого:

while count < 10:
    nameList.append(raw_input("Enter a name: "))
    count += 1

Таким образом, ваше состояние будет оценено, и с помощью метода добавления вы сможете добавлять новые элементы в свой список.

Есть несколько продвинутых трюков, чтобы сделать это легко, но, учитывая ваш уровень, я думаю, вам лучше понять этот код, прежде чем двигаться дальше.

5 голосов
/ 15 ноября 2010

Наиболее идиоматичным является использование понимания списка:

namelist = [raw_input("Enter a name: ") for i in range(10)]

(или используйте _ для i, хотя лично я бы не стал)

Это имеет преимуществосоздание списка на лету, при этом не нужно использовать ни метод append (), ни явное индексирование.

1 голос
/ 15 ноября 2010
count = 0
while listOfNames[count] < 10:
    nameList.append(raw_input("Enter a name: "))
    count += 1

Используйте приложение для быстрого и легкого ...

В качестве альтернативы:

nameList[len(nameList):] = [raw_input("Enter a name: ")]

Редактировать: Вы имели в виду listOfNames для добавления в отличие от nameList?

0 голосов
/ 15 ноября 2010

Ваш список назначен правильно, ваша проблема с использованием индексов, которые еще не существуют.

    count = 0
while listOfNames[count] < 10:
    nameList[count] = raw_input("Enter a name: ")
    count += 1

Я уверен, что этот код не выполняет то, что вы намеревались.Этот код выполняет проверку элементов listOfNames с первого по десятый на число меньше 10, но, поскольку это пустой список, в нем нет элемента с индексом 0 или какого-либо другого индекса по этому вопросу, следовательно, ваш индекс списка изИсключения диапазона.

Следующее будет работать так, как вы намеревались:

count = 0
while len(listOfNames) < 10:     # Keep going until the list has 10 elements
    nameList.append(raw_input("Enter a name: "))
    count += 1

Однако я бы предложил использовать следующее, которое делает то же самое, но должно быть более эффективным, а также болееэстетично:

for _ in range(10):
    listOfNames.append(raw_input("Enter a name:"))

Обратите внимание на использование дополнения вместо ссылки на индекс.Это добавит новый элемент в конец списка, тогда как при использовании индекса, который вы пытались сделать, произойдет сбой, поскольку для присвоения и индексации должен присутствовать элемент, присутствующий в первую очередь.

...