Создание пустого списка определенного размера в Python
Как мне создать пустой список, который может содержать 10 элементов?
После этого я хочу присвоить значения в этом списке. Например:
xs = list() for i inrange(0, 9): xs[i] = i
Однако это дает IndexError: list assignment index out of range. Почему?
Примечание редактора:
В Python списки не имеют заданной емкости, но невозможно назначить элементы, которых еще нет. Ответы здесь показывают код, который создает список с 10 "фиктивными" элементами для замены позже. Однако большинство новичков, сталкивающихся с этой проблемой, на самом деле просто хотят создать список, добавив в него элементы. Это должно быть сделано с помощью .append метода, хотя часто существуют способы создания списка более прямым способом, зависящие от конкретной проблемы. Пожалуйста, прочитайте, Почему этот итеративный код увеличения списка выдает IndexError: list assignment index out of range? Как я могу повторно добавлять элементы в список? подробнее.
Переведено автоматически
Ответ 1
Вы не можете назначить списку значение типа xs[i] = value, если только список уже не инициализирован по крайней мере i+1 элементами (потому что первый индекс равен 0). Вместо этого используйте xs.append(value) для добавления элементов в конец списка. (Хотя вы могли бы использовать обозначение присваивания, если бы использовали словарь вместо списка.)
>>> defdisplay(): ... xs = [] ... for i inrange(9): # This is just to tell you how to create a list. ... xs.append(i) ... return xs ... >>> print display() [0, 1, 2, 3, 4, 5, 6, 7, 8]
Понимание списка (используя квадраты, потому что для диапазона вам не нужно всего этого делать, вы можете просто вернуть range(0,9) ):
Вышесказанное создаст список размером 10, где каждая позиция инициализируется значением None. После этого вы можете добавлять в него элементы:
lst = [None] * 10 for i inrange(10): lst[i] = i
По общему признанию, это не питонический способ делать что-либо. Лучше сделайте это:
lst = [] for i inrange(10): lst.append(i)
Или еще проще, в Python 2.x вы можете сделать это, чтобы инициализировать список со значениями от 0 до 9:
lst = range(10)
И в Python 3.x:
lst = list(range(10))
Ответ 3
принятый в настоящее время ответ varunl
>>> l = [None] * 10 >>> l [None, None, None, None, None, None, None, None, None, None]
Хорошо работает для безынерционных типов, таких как numbers. К сожалению, если вы захотите создать список списков, вы столкнетесь с ошибками ссылок. Пример в Python 2.7.6:
Как вы можете видеть, каждый элемент указывает на один и тот же объект списка. Чтобы обойти это, вы можете создать метод, который инициализирует каждую позицию ссылкой на другой объект.
definit_list_of_objects(size): list_of_objects = list() for i inrange(0,size): list_of_objects.append( list() ) #different object reference each time return list_of_objects
Вероятно, существует стандартный, встроенный в python способ сделать это (вместо написания функции), но я не уверен, что это такое. Был бы рад, если бы его исправили!
Я удивлен, что никто не предлагает этот простой подход к созданию списка пустых списков. Это старая тема, но я просто добавляю это для полноты картины. Это создаст список из 10 пустых списков