У меня есть этот очень длинный кусок кода, который определяет список, используя x [0] = 2 и т. Д. В python 3.7. Почему это не работает? - PullRequest
0 голосов
/ 04 февраля 2020

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

import random as random
quotes = [] 
authors = [] 
quotes[0] = "I have a new philosophy. I'm only going to dread one day at a time." 
authors[0] = "Charles Schulz" 
quotes[1] = "Reality is the leading cause of stress for those in touch with it." 

...

authors[5577] = "Henry David Thoreau" 
quotes[5578] = "Sometimes the cards we are dealt are not always fair. However you must keep smiling and moving on." 
authors[5578] = "Tom Jackson"
x=random.randint(2,5577)
for y in range(0,5579,1):
    print(quotes[y]+" "+author[y])```

Ответы [ 4 ]

1 голос
/ 04 февраля 2020

Вы делаете quotes[0] и т. Д., В то время как quotes, будучи пустым, не содержит индекса 0, 1 и т. Д. c. Вместо этого вы должны использовать функцию append(), чтобы добавить элементы в список.

Или, если вы действительно хотите использовать quotes[0] и т. Д., Тогда выполните

quotes = [None] * 5579

или

quotes = [''] * 5579

в начале программы.

1 голос
/ 04 февраля 2020

Из больше в списках , функция append() предлагает окольную альтернативу тому, что вы пытаетесь сделать:

>>> quotes = []
>>> quotes[0:] = ["first quote"]
>>> quotes[1:] = ["second quote"]
>>> quotes
['first quote', 'second quote']

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

Как я уже упоминал в комментарии выше, IndexError происходит из списка, не имеющего этого элемента , который не позволяет ошибочно сделать что-то вроде quotes[55] и ожидать, что это сработает слишком рано.

1 голос
/ 04 февраля 2020

Вы получаете индекс из-за ошибки диапазона, так как вы пытаетесь получить доступ к элементам из пустого массива. Вы можете либо инициализировать автора и список цитат:

authors = [None] * 5579
quotes = [None] * 5579

, либо лучше добавить элементы в список, используя метод append.

authors = []
quotes = []

quotes.append("I have a new philosophy. I'm only going to dread one day at a time.") 
authors.append("Charles Schulz")

...
quotes.append("Sometimes the cards we are dealt are not always fair. However you must keep smiling and moving on.") 
authors.append("Tom Jackson")


for author, quote in zip(authors,quotes):
    print("{} {}".format(author, quote))
1 голос
/ 04 февраля 2020

Как указано в комментариях, если вы создаете пустой список, вы не можете присвоить значения с помощью оператора [], это для ссылки на элементы, которые уже существуют внутри списка (так что вы можете обновить или прочитать их). Для добавления новых значений в пустой список мы используем метод append, подобный следующему:

quotes = []
quotes.append("I have a new philosophy. I'm only going to dread one day at a time.")

print(quotes[0])
>>> "I have a new philosophy. I'm only going to dread one day at a time."

Теперь вы можете изменить его, потому что он существует:

quotes[0] =  "Reality is the leading cause of stress for those in touch with it." 
print(quotes[0])
>>>  "Reality is the leading cause of stress for those in touch with it." 

Если вы попытаетесь получить доступ index 1 он даст вам IndexError, потому что он имеет только индекс 0 (в моем примере).

...