Я хочу создать пустой список (или любой другой способ), который может содержать 10 элементов.
После этого я хочу присвоить значения в этом списке, например, это должно отображать от 0 до 9:
s1 = list();
for i in range(0,9):
s1[i] = i
print s1
Но когда я запускаю этот код, он генерирует ошибку или в другом случае просто отображает []
(пусто).
Может кто-нибудь объяснить, почему?
[]
) по определению имеет ноль элементов. То , что вы , по- видимому хотите список falsy значений , какNone
,0
, или''
.0
чтобы9
вы должны реально использоватьfor i in range(0, 10)
, какие средстваfor (int i = 0, i < 10, i++)
.Ответы:
Вы не можете присвоить списку подобное
lst[i] = something
, если список уже не инициализирован хотя бы сi+1
элементами. Вам нужно использовать append для добавления элементов в конец списка.lst.append(something)
,(Вы можете использовать нотацию присваивания, если вы используете словарь).
Создание пустого списка:
Присвоение значения существующему элементу из приведенного выше списка:
Имейте в виду, что что-то подобное
l[15] = 5
все равно не получится, так как в нашем списке всего 10 элементов.range (x) создает список из [0, 1, 2, ... x-1]
Использование функции для создания списка:
Понимание списка (используя квадраты, потому что для диапазона вам не нужно делать все это, вы можете просто вернуться
range(0,9)
):источник
a = [0 for _ in range(10)]
Попробуйте это вместо:
Выше будет создан список размером 10, где каждая позиция инициализируется
None
. После этого вы можете добавить к нему элементы:По общему признанию, это не Pythonic способ сделать вещи. Лучше сделать это:
Или даже проще , в Python 2.x вы можете сделать это, чтобы инициализировать список со значениями от 0 до 9:
И в Python 3.x:
источник
lst = [''] * 10
илиlst = [0] * 10
arr = [None for _ in range(10)]
.в настоящее время принятый ответ Варунла
Хорошо работает для не ссылочных типов, таких как числа. К сожалению, если вы хотите создать список списков, вы столкнетесь с ошибками ссылок. Пример в Python 2.7.6:
Как видите, каждый элемент указывает на один и тот же объект списка. Чтобы обойти это, вы можете создать метод, который будет инициализировать каждую позицию для другой ссылки на объект.
Вероятно, существует встроенный способ Python по умолчанию (вместо написания функции), но я не уверен, что это такое. Был бы рад исправить!
Изменить: это
[ [] for _ in range(10)]
Пример :
источник
append
очень часто уступает списку пониманий. Вы можете создать свой список списков через[ [] for _ in range(10)]
.Вы можете
.append(element)
в список, например:s1.append(i)
. В настоящее время вы пытаетесь получить доступ к элементу (s1[i]
), который не существует.источник
Есть два «быстрых» метода:
Похоже, что
[None]*x
быстрее:Но если вы в порядке с диапазоном (например
[0,1,2,3,...,x-1]
), тогдаrange(x)
может быть быстрее:источник
list(range(n))
вместо этого, так какrange()
не возвращает список, но является итератором, и это не быстрее, чем[None] * n
.Я удивлен, что никто не предлагает такой простой подход к созданию списка пустых списков. Это старая ветка, но для полноты добавлю это. Это создаст список из 10 пустых списков
источник
x = [[]] * 10
состоит в том, что в последнем каждый элемент в списке указывает на один и тот же объект списка . Поэтому, если вам просто не нужно 10 копий одного и того же объекта, используйтеrange
базовый вариант, поскольку он создает 10 новых объектов. Я нашел это различие очень важным.(Это было написано на основе оригинальной версии вопроса.)
Все списки могут содержать столько элементов, сколько вам нужно, при условии ограничения только доступной памяти. Только «размер» из списка , который имеет значение является количеством элементов в настоящее время в нем.
print display s1
неверный синтаксис; основываясь на вашем описании того, что вы видите, я полагаю, вы имели в видуdisplay(s1)
и тогдаprint s1
. Для этого вы должны предварительно определить глобалs1
для передачи в функцию.Вызов
display
не изменяет список, который вы передаете, как написано. Ваш код говорит «s1
это имя для того, что было передано в функцию; хорошо, теперь первое, что мы сделаем, это полностью забудем об этом, и давайтеs1
вместо этого начнем ссылаться на вновь созданноеlist
. Теперь мы изменим это».list
». Это не влияет на значение, которое вы передали.Здесь нет причин для передачи значения. (Нет реальной причины для создания функции, но это не относится к делу.) Вы хотите что-то «создать», так что это результат вашей функции. Для создания того, что вы описываете, не требуется никакой информации, поэтому не передавайте никакой информации
return
.Это даст вам что-то вроде:
Следующая проблема, которую вы заметите, состоит в том, что в вашем списке будет всего 9 элементов, потому что конечная точка пропускается
range
функцией. (Как следует из примечаний,[]
работает точно так жеlist()
, точка с запятой не нужна,s1
плохое имя для переменной, и дляrange
начала вам нужен только один параметр0
.) Итак, в итоге вы получитеТем не менее, это все еще не хватает цели;
range
это не какое - то магическое ключевое слова , которое является частью языка такfor
иdef
есть, но вместо того, чтобы это функция. И угадайте, что возвращает эта функция? Это верно - список этих целых чисел. Таким образом, вся функция рушитсяи теперь вы понимаете, почему нам вообще не нужно самим писать функцию;
range
это уже та функция, которую мы ищем. Хотя, опять же, нет необходимости или причины для «предварительного размера» списка.источник
Один простой способ создать 2D матрицу размера
n
с использованием вложенных списков:источник
Я немного удивлен, что самый простой способ создать инициализированный список - это ни один из этих ответов. Просто используйте генератор в
list
функции:источник
range(9)
в системуlist()
?range(9)
Уже не возвращает список?range
- это не список и не генератор. Это встроенный неизменяемый подклассSequence
.Вот мой код для списка 2D в Python, который будет читать нет. строк из ввода:
источник
Принятый ответ имеет несколько ошибок. Например:
Таким образом, каждый словарь относится к одному и тому же объекту. То же самое верно, если вы инициализируете с массивами или объектами.
Вы можете сделать это вместо этого:
источник
Я наткнулся на этот ТАК вопрос при поиске аналогичной проблемы. Мне пришлось построить 2D-массив, а затем заменить некоторые элементы каждого списка (в 2D-массиве) элементами из dict. Затем я наткнулся на этот ТАК вопрос, который помог мне, может быть, это поможет другим новичкам обойти. Ключевой трюк состоял в том, чтобы инициализировать 2D-массив в виде массива с последующим использованием
array[i,j]
вместоarray[i][j]
.Для справки это кусок кода, где я должен был использовать это:
Теперь я знаю, что мы можем использовать понимание списка, но для простоты я использую вложенный цикл for. Надеюсь, что это помогает другим, кто сталкивается с этим постом.
источник
Сделайте его более функциональным.
источник
Чтобы создать список, просто используйте следующие скобки: "[]"
Чтобы добавить что-то в список, используйте list.append ()
источник
Этот код генерирует массив, который содержит 10 случайных чисел.
источник