Создайте пустой список определенного размера в Python
В этом посте мы обсудим, как создать пустой список заданного размера в Python.
Чтобы присвоить любое значение списку, используя оператор присваивания в позиции i , a[i] = x , размер списка должен быть не менее i+1 . В противном случае он поднимет IndexError , как показано ниже:
Решение состоит в том, чтобы создать пустой список None когда элементы списка заранее неизвестны. Это можно легко сделать, как показано ниже:
Приведенный выше код создаст список размеров 5 , где каждая позиция инициализируется None . None часто используется в Python для обозначения отсутствия значения.
Другой альтернативой для создания пустых списков заданного размера является использование генераторов списков:
Какое решение использовать?
Первое решение хорошо работает для нессылочных типов, таких как числа. Но в некоторых случаях вы можете столкнуться с ошибками ссылок. Например, [[]] * 5 приведет к повторению списка, содержащего один и тот же объект списка 5 раз.
Решение этой проблемы заключается в использовании списков, подобных этому:
Это все о создании пустого списка заданного размера в Python.
Также см:
Оценить этот пост
Средний рейтинг 4.9 /5. Подсчет голосов: 20
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования
Как создать пустой список в Python
Список в Python – это структура данных, которая может хранить несколько элементов разнородного типа. В какой-то момент в вашей программе вам может потребоваться создать пустой список и добавить в него элементы на следующих этапах.
Чтобы создать пустой список в python, присвойте переменной пустые квадратные скобки.
Где, [] – пустой список.
Вы также можете использовать конструктор класса list, как показано ниже, для создания пустого списка.
Пример 1
В следующем примере мы создадим пустой список и проверим тип данных переменной.
Если вы проверите длину этого списка в Python, вы получите нулевую длину.
Пример 2
В следующем примере мы создадим пустой список с помощью конструктора class list.
Как создать пустой список в питоне
К элементам в списке мы можем обращаться по-разному. Не только с помощью циклов. Например, если мы знаем порядковый номер элемента в списке, то есть его индекс, то можем по нему обратиться к элементу. Например, мы знаем, что в нашем my_list = [1, 1.4, ‘line’, [1, 2, 3], 1.4] элемент «line» третий по счету, но если считать по-питоновски, то есть от 0, то получается, что второй. То есть индекс элемента «line» — 2. Поэтому обратиться к этому элементу мы можем вот так — my_list[2] — сначала название списка, а затем в квадратных скобках нужно указать индекс.
Но когда элементов в списке очень много и просто глазами определить индекс каждого элемента не получается, можно узнать его с помощью команды .index(). Сначала нужно указать название списка, потому команду, а в скобках сам элемент, индекс которого вы хотите определить, — my_list.index(1.4). В ответ мы получим 1.
Только учтите, если у вас есть несколько одинаковых элементов в списке, то это команда вернет вам индекс того, что стоит первым в списке.
Пока что я вручную создавала списки и добавляла в них элементы, но так во взрослой жизни не делается. Для того, чтобы добавить элемент в список используется специальная команда .append(). И указанный в скобках элемент добавляется в конец списка.
Команда .insert() тоже добавляет элементы в список, но в определенное место. Первым параметром вы вводите индекс, по которому нужно разместить элемент, а вторым параметром — сам элемент. В output можно увидеть, что элемент встраивается в список ровно на то место, которое мы указали, а все остальные элементы смещаются вправо от него.
Также есть и специальная команда для удаления элементов из списка — .remove(), где в скобочках нужно указать, какой именно элемент должен быть удален из списка. Но если таких элементов в списке несколько, удалится только самый первый. Если вы попросите удалить элемент, которого нет в списке, то вы получите ошибку. Давайте удалим элемент 100 из списка.
Также списки можно сортировать с помощью функции sorted(). Давайте создадим новый список в числами number_list = [3, 49, 1, 16]. И применим к нему sorted(). Мы увидим, в output отсортированный от меньшего к большему список.
Здесь важно понимать, что после применения sorted() исходный number_list на самом деле никак не изменило. Для того, чтобы сохранить список в отсортированном виде, нужно сохранить sorted(number_list) в переменную.
Сортировать можно, кстати, не только числа в списках, но и строки.
Давайте теперь попрактикуемся и попробуем написать небольшую программу. Она будет 5 раз просить пользователя ввести число и каждое из этих чисел добавлять в список. А потом распечатает нам список из этих 5 чисел. Если вы знаете, как решить эту задачку, то попробуйте сначала сами написать код, а потом сверьтесь с моей версией.
Для начала нужно создать пустой список, куда будут собираться числа, которые ввел пользователь. А дальше с помощью цикла for i in range(5) мы обозначим, что хотим пять раз совершить какую-то операцию. Для начала пять раз с помощью input(«Введите число») попросим пользователя ввести число. А затем введенное число сохраним в наш список. И распечатаем наш список.
Теперь давайте усложним задачу. Теперь программа должна просить пользователя 5 раз ввести четное число, проверять, действительно ли оно четное. Если да, то добавлять в список, если нет, то выводить пользователю на экране *введенное пользователем число* не делится на 2 без остатка.
Для того, чтобы проверять четное число или нет можно использовать деление через %, которое возвращает остаток от деления. Если вы напишете 4%2, то в output будет 0, потому что остатка нет.
Или еще пример. Иногда бывает так, что у вас есть какие-то данные, но в них есть грязь, которую лучше бы вычистить прежде чем приступать к анализу. Например, у нас есть вот такой список — my_list = [‘2%’, «45 %», ‘6%’, “11”, ‘15 %’] . Давайте очистим каждый элемент от лишнего знака %.
Я думаю, вы уже поняли, почему в самом начале урока я сказала, что мы очень часто сталкиваемся со списками по работе. Потому что такой список, это не что иное как просто строчка в таблице. А таблица — это просто список списков. Давайте разберем на другом очень жизненном примере.
Допустим у вас есть данные о количестве преступников в каких-то населенных пунктах — crimes = [30000, 10000, 200]. И мы хотим узнать, в каком из этих населенных пунктах самая криминогенная обстановка. И вы мне скажете: «Так давай используем функцию max(crimes) и она вернет нам это самое большое значение из списка crimes и мы разойдемся.» Технически это будет правильный ответ. Но не все так просто. Показатели типа количества преступников, детей сирот, людей с алкогольной зависимость и так далее обязательно нужно нормировать на количество всех людей проживающих в этом населенном пункте. Иначе всегда бы оказывалось, что Москва самый опасный город в России просто потому, что в Москве живет больше всего людей. Поэтому нам пригодится еще одна строчка в таблице, то есть еще один список — population = [100000, 50000, 1000]. И дальше нам нужно будет по формуле количество преступников/население * 1000 рассчитать число преступников на 1000 человек.
Давайте создадим пустой список norm_crimes = [], в который будем собирать нормированный показатель.
В итоге если мы объединим все три списка в один, то по сути получим обычную таблицу.
Если бы мы сохранили этот наш список списков в xls или csv и открыли бы этот файл в табличном редакторе, то он выглядел бы как обычная таблица.
Можем еще добить нашу табличку, посчитав сумму всех преступников, сумму населения для всех населенных пунктов и общий нормированный показатель для всех населенных пунктов. Чтобы узнать сумму всех чисел в списке, нам не нужно ходить циклом по списку и прибавлять один элемент за другим. Можно использовать sum().
И с помощью команды .append() давайте добавим эти показатели в соответсвующие им списки.
Теперь полученные данные мы могли бы использовать для материала или дальнейшего анализа!)
В этом уроке я рассказала об основных методах и функциях списков, но не обо всех. Как и для чего применяются другие функции можете посмотреть вот здесь. Тетрадку Jupyter Notebook с этим уроком можно найти в нашем GitHub здесь. А если хотите порешать задачки для тренировки, то мы собрали их здесь.
list — списки
Список — это упорядоченная, изменяемая последовательность любых объектов языка Python.
Создание с помощью литералов []
Простейший способ создать список — перечислить его элементы через запятую и заключить их в квадратные скобки:
Если указать только квадратные скобки, то будет создан пустой список:
Квадратные скобки являются литералом спискового типа данных, то есть благодаря им интерпретатор Python может понять что перед ним находится именно список, а не какой-то другой тип данных. Кстати, создание списков именно таким образом может выполняться в многострочном варианте, что бывает очень удобно если вам необходимо создать матрицу:
Как нетрудно заметить, созданная только что матрица, по своей сути является списком, внутри которого находятся три вложенных списка. Вложение списков друг в друга бывает очень удобным не только для создания матриц, но и создания прямоугольных таблиц. В будущем, вам возможно придется работать с табличными базами данных, так вот, один из способов добавления целых таблиц или их фрагментов в базу данных, как раз и заключается в том, что они могут быть созданы в виде вложенных списков, например, вот так:
Создание с помощью генераторов списков
В некоторых случаях, когда необходимо создать очень большой список с элементами которые получаются с помощью простого правила, то гораздо удобнее создавать его не вручную, а с помощью генераторов списков:
Генераторы списков, довольно просты в использовании, к ним нужно просто привыкнуть. По сути, генераторы это просто вывернутые наизнанку циклы for и они вовсе не обязаны быть одномерными, т.е. генераторы вложенные друг в друга позволяют создавать списки вложенные в другие списки:
Функция list()
Еще один способ создания списков заключается в том чтобы использовать встроенную функцию list() . Если вызвать данную функцию без аргументов, то будет возвращен пустой список:
Если передать функции list любой итерируемый объект, то он так же будет преобразован в список, например, вот так список может быть получен из строки:
Помимо строк, аргументом может быть любой итератор, например range() :
В общем, любая последовательность не спискового типа данных, будет преобразована к списковому типу, что бывает очень полезно, для реализации многих алгоритмов обработки данных. Например, кортеж, который является неизменяемой версией списков, может быть преобразован в список вот так:
Словарь, который хранит данные в виде пар ключ — значение, так же может быть преобразован в список, но в результирующий список попадут только имена ключей:
Множества, которые хранят только уникальные объекты, так же могут быть преобразованы в списки:
Даже строки байтов могут быть преобразованы в список:
Ну а если функции list() передать список, то он будет возвращен как бы без изменений, но на самом деле будет возвращена его поверхностная копия:
Спискок — это последовательность
Выше было сказано, что если в качестве аргумента функции list() передать любую последовательность языка Python, то она будет преобразована в список. Последовательностями считаются любые типы данных, которые поддерживают:
- оператор извлечения срезов — [START:STOP:STEP] ;
- оператор вхождения in ;
- возможность определения длины (размера) с помощью функции len() ;
- возможность выполнять итерации по элементам;
Списки считаются последовательностями поскольку удовлетворяют всем вышеперечисленным требованиям. Функция len() возвращает длину (размер) списка:
Но будьте внимательны, len() не учитывает длину вложенных элементов, например, список [1, ‘abc’, [55, 66, 77]] состоит из трех элементов: числа, строки и списка.
Извлекать данные можно с помощью оператора [START:STOP:STEP] :
Проверить вхождение какого-нибудь элемента в список можно с помощью оператора in :
Кстати, если вам нужно, наоборот, убедиться в том, что какой-нибудь элемент не содержится внутри списка, то можно воспользоваться конструкцией not in :
Возможность выполнения итераций по элементам так же возможна благодаря конструкции for. in.
Любопытно, то что благодаря механизму распаковывания последовательностей возможно выполнение итераций по вложенным спискам одинаковой длины:
Список — это упорядоченная последовательность
Список является упорядоченной последовательностью в том смысле, что все его объекты упорядочены по своему местоположению, а доступ к ним выполняется с помощью целочисленных индексов, которые и определяют местоположение элементов.
Выше мы уже видели, что механизм индексации списков аналогичен индексации строк с помощью оператора [START:STOP:STEP] . Но из-за того, что список может содержать внутри себя абсолютно любые объекты, включая другие последовательности, то возникает необходимость в более сложных методах индексации:
Например, если необходимо получить доступ к символу ‘D’ , то его местоположение придется указывать с помощью трех операторов [] :
Несмотря на количество вложенных списков, получить доступ можно к абсолютно любому элементу, хотя с непривычки все-таки можно «заблудиться в трех соснах».
Списки — это изменяемые последовательности
Элементы списков и даже целые фрагменты списков могут быть изменены:
Чтобы изменить какой-нибудь элемент, достаточно обратиться к нему по индексу и указать его новое значение после оператора присваивания = :
Вставить элемент в определенную позицию можно следующим способом:
Заменить несколько элементов списка можно с помощью присваивания его срезу, списка аналогичной длины:
Если присвоить срезу списка пустой список, то это приведет к удалению элементов, которые входят в указанный срез:
Списки — это коллекции
Списки очень часто называют коллекциями, как раз потому что в отличие от массивов они могут содержать объекты разного типа и произвольные структуры данных (словари, множества и т.д.):
Обратите внимание, что в данном списке находятся числа, которые относятся к целым, вещественым и комплексным числовым типам данных, а также есть строка и еще один вложенный список. Массив же, в традиционном понимании этого слова, должен состоять только из элементов одинакового типа, например:
Пожалуй, единственное, где стоит относиться к спискам как к массивам, т.е. стараться что бы все элементы были одинакового типа — это научные вычисления и обработка данных с помощью таких пакетов как NumPy и Pandas. В этих случаях типизация массивов позволяет существенно ускорить работу алгоритмов. А во всех остальных случаях, списки — это самые настоящие коллекции, в которых можно хранить все что угодно, лишь бы это «что угодно» было объектом языка Python. Например, функции являются объектами языка Python, а значит они тоже могут храниться в списках, скажем вот так:
Более того, эти функции можно использовать, если вызвать их из списка с помощью оператора [] . Например, функция int() преобразует (если это возможно) любой объект в целое десятичное число:
А вот мы делаем тоже самое с помощью функции, которая хранится в списке F :
Вот так мы преобразуем число в строку:
А вот так мы можем сначала сделать из числа строку а потом из этой строки сделать список:
Вот таким образом может быть найдена сумма элементов списка:
А если хочется взглянуть на функции и методы, которые поддерживают списки, то можем выполнить F[4](F) .
Такие примеры могут только запутать, но данный пример показывает что любой объект языка Python может быть элементом в списке (и в любой другой коллекции), а значит он может быть использован и даже передан в другие списки.