Создание списков в Python. Объединение списков в Python. Функция list() в Python
Популярность Python обуславливается его относительной простотой и широкими функциональными возможностями. Среди них — успешная работа со структурами данных — это списки, кортежи, словари и множества. В нашей сегодняшней статье мы разберёмся со списками, поговорим про добавление и поиск элементов, а напоследок подробно расскажем об особенностях сортировки в Python.
Что такое список в Python?
Список (list) представляет собой структуру данных, предназначенную для хранения объектов. При этом не стоит путать список с массивом.
Некоторые особенности списка в Python: — в списке можно хранить элементы разных типов; — размер списка можно изменять.
Как хранятся списки в памяти?
Во время создания списка в Python происходит резервирование пустой области в памяти. Условно можно сказать, что это некий контейнер, где содержатся ссылки на другие элементы данных. Однако в отличие от таких данных, как строка либо число, содержимое контейнера списка может меняться.
Чтобы лучше представлять вышеописанный процесс, посмотрим на картинку. Мы увидим список, который содержит ссылки на объекты 1 и 2. При этом после выполнения операции a[1] = 3, вторая ссылка станет указывать на объект № 3 (в Питоне элементы списка нумеруются, начиная с нуля).

Создание, удаление и изменение списков, а также работа с его элементами
Создать список в Python можно следующим способом:
>>> a = [] >>> type(a) >>> b = list() >>> type(b)
Кроме того, возможно создание списка с заранее известным набором данных:
>>> a = [1, 2, 3] >>> type(a)
Если список уже есть и нужно создать копию, это тоже не проблема:
>>> a = [1, 3, 5, 7] >>> b = list(a) >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7]Обратите внимание, что если вы делаете простое присваивание списков друг другу, то переменной (в нашем примере это b) присваивается ссылка на тот же самый элемент данных в памяти, как и в списке a (не на копию списка a). Таким образом, если захотите изменить список a, b тоже будет меняться.
>>> a = [1, 3, 5, 7] >>> b = a >>> print(a) [1, 3, 5, 7] >>> print(b) [1, 3, 5, 7] >>> a[1] = 10 >>> print(a) [1, 10, 5, 7] >>> print(b) [1, 10, 5, 7]Если нужно добавить элемент в список, используем метод append() :
>>> a = [] >>> a.append(3) >>> a.append("hello") >>> print(a) [3, 'hello']А если требуется удалить элемент из списка в том случае, когда его значение известно, рекомендуется применение метода remove(x) , который удалит первую ссылку на этот элемент:
>>> b = [2, 3, 5] >>> print(b) [2, 3, 5] >>> b.remove(3) >>> print(b) [2, 5]Для удаления элемента по индексу подходит команда del имя_списка[индекс] :
>>> c = [3, 5, 1, 9, 6] >>> print(c) [3, 5, 1, 9, 6] >>> del c[2] >>> print(c) [3, 5, 9, 6]Кроме того, можно изменить элемент списка в Python (его значение), напрямую к нему обратившись. Но для этого надо знать индекс элемента:
>>> d = [2, 4, 9] >>> print(d) [2, 4, 9] >>> d[1] = 17 >>> print(d) [2, 17, 9]А что нужно сделать, если требуется очистить список в Python? Для этого можно заново его проинициализировать, как будто вновь его создаёте. А чтобы получить доступ к элементу списка, поместите индекс данного элемента в квадратные скобки:
>>> a = [3, 5, 7, 10, 3, 2, 6, 0] >>> a[2] 7Можно применять и отрицательные индексы (счёт пойдёт с конца). Например, чтобы получить доступ к последнему элементу списка в Python, используют следующую команду:
>>> a[-1] 0Также может понадобиться найти и получить из списка некоторый подсписок в заданном диапазоне индексов. Чтобы это реализовать, поместите начальный и конечный индексы в квадратные скобки и разделите их двоеточием:
>>> a[1:4] [5, 7, 10]Объединить списки в Python тоже несложно. Объединение легко сделать с помощью метода extend :
combo_list = [1] one_list = [4, 5] a = combo_list.extend(one_list) print(a) # [1, 4, 5]Также в Python можно объединить список с другим, просто добавив их вместе. Это довольно простой способ объединения:
my_list = [1, 2, 3] my_list2 = ["a", "b", "c"] combo_list = my_list + my_list2 print(combo_list) # [1, 2, 3, 'a', 'b', 'c']Как видите, объединить списки достаточно легко.
Закрепляем методы списков в Python
Знание соответствующих методов и функций в Python позволит выполнить поиск, добавить нужный элемент, сделать сортировку и т. д. Итак, давайте перечислим основные методы списков и их функции (вспомним те, что уже упоминали, плюс добавим новые): 1. list.append(x) — обеспечивает добавление элемента в конец списка:
>>> a = [1, 2] >>> a.append(3) >>> print(a) [1, 2, 3]2. list.extend(L) — расширяет имеющийся список путем добавления элементов из списка L.
>>> a = [1, 2] >>> b = [3, 4] >>> a.extend(b) >>> print(a) [1, 2, 3, 4]3. list.insert(i, x) — добавляет, а точнее, вставляет элемент х в позицию i. В качестве первого аргумента выступает индекс элемента, после которого вставляется элемент х.
>>> a = [1, 2] >>> a.insert(0, 5) >>> print(a) [5, 1, 2] >>> a.insert(len(a), 9) >>> print(a) [5, 1, 2, 9]4. list.remove(x) — служит для удаления первого вхождения элемента х, включённого в наш список.
>>> a = [1, 2, 3] >>> a.remove(1) >>> print(a) [2, 3]5. list.pop([i]) — обеспечивает удаление элемента из позиции i. Если применять метод без аргумента, удаляется последний элемент, находящийся в списке.
>>> a = [1, 2, 3, 4, 5] >>> print(a.pop(2)) 3 >>> print(a.pop()) 5 >>> print(a) [1, 2, 4]6. list.clear() — просто удаляет все элементы:
>>> a = [1, 2, 3, 4, 5] >>> print(a) [1, 2, 3, 4, 5] >>> a.clear() >>> print(a) []7. list.index(x[, start[, end]]) — позволяет вернуть индекс элемента:
>>> a = [1, 2, 3, 4, 5] >>> a.index(4) 38. list.count(x) — возвращает число вхождений элемента х:
>>> a=[1, 2, 2, 3, 3] >>> print(a.count(2)) 29. list.sort(key=None, reverse=False) — сортирует элементы списков по возрастанию. Чтобы выполнить сортировку в обратном порядке используют флаг reverse=True. Кроме того, дополнительные возможности открываются параметром key.
>>> a = [1, 4, 2, 8, 1] >>> a.sort() >>> print(a) [1, 1, 2, 4, 8]10. list.reverse() — порядок расположения элементов меняется на обратный:
>>> a = [1, 3, 5, 7] >>> a.reverse() >>> print(a) [7, 5, 3, 1]11. list.copy() — копирует списки:
>>> a = [1, 7, 9] >>> b = a.copy() >>> print(a) [1, 7, 9] >>> print(b) [1, 7, 9] >>> b[0] = 8 >>> print(a) [1, 7, 9] >>> print(b) [8, 7, 9]Сортировка с помощью функции sorted()
Давайте ещё раз вернёмся к вопросу сортировки в Python. Чтобы отсортировать данные и найти нужные значения, используют простую встроенную функцию sorted() , принимающую итерируемый тип и возвращающую отсортированный список.
a = [3, 2, 5 ,4, 7, 1] a = sorted(a) print(a) # [1, 2, 3, 4, 5, 7]t = ('Zane', 'Bob', 'Janet') t = sorted(t) print(t) # ['Bob', 'Janet', 'Zane']d = d = sorted(d) print(d) # [1, 2, 3]Помните, что функция sorted() возвратит список каждый раз вне зависимости от того, какой тип будет передан.
Идём дальше. Мы уже упоминали ранее метод list.sort() . Так вот, он определён только для списков, зато функция sorted() позволит отсортировать любые итерируемые объекты:
>>> sorted() [1, 2, 3, 4, 5]Сортировка по убыванию и возрастанию в Python
Ранее упомянутый параметр reverse есть не только у метода list.sort() , но и у функции sorted() . Он принимает boolean-значение и нужен для сортировки по убыванию либо возрастанию. Ниже мы сортируем учеников по убыванию их возраста:
>>> sorted(student_tuples, key=itemgetter(2), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] >>> sorted(student_objects, key=attrgetter('age'), reverse=True) [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]Стабильность сортировки, сложная сортировка
Начиная с Python версии 2.2, сортировки гарантированно стабильны. Речь о том, что если у записей одинаковые ключи, их порядок не меняется.
>>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)] >>> sorted(data, key=itemgetter(0)) [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]Здесь 2 записи с 'blue' сохранили изначальный порядок. Данное свойство позволяет сортировать сложные данные путём постепенных сортировок. Например, надо найти и отсортировать данные учеников как по возрасту в возрастающем порядке, так и по оценкам в порядке убывания. Сортировка буде выглядеть так:
>>> s = sorted(student_objects, key=attrgetter('age')) # по вторичному ключу >>> sorted(s, key=attrgetter('grade'), reverse=True) # по первичному [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
Остались вопросы? Хотите поделиться своим личным опытом работы со списками? Нашли ошибку в тексте? Пишите комментарий!
Как работать со списками в Python
Учимся добавлять и изменять элементы, объединять и копировать списки.
Анастасия Хамидулина
Автор статьи
2 мая 2022 в 11:01В современных языках программирования есть предустановленные типы: символы, числа или классы. Есть и коллекции — массивы, списки и прочие структуры данных — множества элементов фиксированной или динамической размерности.
При объявлении переменной под объект выделяется оперативная память. Например, для строки в четыре символа — восемь байт. Каждый символ занимает адрес в оперативной памяти, а строка представляет собой массив этих адресов. В C-подобных языках массивы создаются определенного размера, под тип объектов. В Python же нет ограничений ни по типу элементов множества, ни по его размерности. То есть список в Python — это динамическая коллекция указателей.
Как решать типовые задачи
https://sky.pro/media/pep8/
Объявить список
Синтаксическая конструкция для создания списка Python:
mylst = [1, 2, 3, 4, 5]Mylst — название переменной. В скобках указали элементы.
В Python есть ключевое слово list(). Это функция, которая либо создает пустой список, либо приводит к списку итерируемый объект. Чтобы создать пустой объект списка с помощью функции, напишите:
mylst = list()Обратиться к элементу
Списки — это множества элементов. Чтобы обратиться к ним, указывают индекс — порядковый номер. В отличие, например, от словаря, который позволяет получать значение по ключу. Индекс первого элемента — 0, второго — 1, третьего — 2.
Так обратитесь к пятому элементу списка:
mylst = [1, 2, 3, 4, 5] print(mylst[4]) 5Python-разработчик: новая работа через 9 месяцев
Получится, даже если у вас нет опыта в IT
Добавить элемент
Сделайте это с помощью встроенной функции append():
mylst = [1, 2, 3, 4, 5] mylst.append(6) print(mylst) [1, 2, 3, 4, 5, 6]Либо с помощью метода insert(), который принимает два аргумента — индекс и значение:
mylst = [1, 2, 3, 4, 5] mylst.insert(1, 25) print(mylst) [1, 25, 2, 3, 4, 5]❗ Если добавить элемент с помощью этого метода, произойдет смещение, а не его замена.
Изменить элемент
Для этого установите новое значение по его индексу:
mylst = [1, 2, 3, 4, 5] mylst[1] = None print(mylst) [1, None, 3, 4, 5]В Python необязательно, чтобы элементы коллекции были одного типа.
Удалить элемент
Для этого воспользуйтесь встроенной функцией del():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1] del mylst[2] print(mylst) [1, 2, 4, 5, 4, 3, 2, 1]Либо примените метод удаления remove():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1] mylst.remove(2) print(mylst) [1, 3, 4, 5, 4, 3, 2, 1]Проверить на вхождение
Чтобы проверить, есть ли указанный элемент в списке, воспользуйтесь ключевым словом in:
mylst = [1, 2, 3, 4, 5] print(None in mylst) False print(3 in mylst) TrueОбъединить списки
Вызовите метод extend():
mylst = [1, 2] mylst1 = [3, 4] mylst2 = [5] mylst.extend(mylst1) print(mylst) [1, 2, 3, 4] mylst.extend(mylst2) print(mylst) [1, 2, 3, 4, 5]Или оператор сложения с присваиванием:
mylst = [1, 2] mylst1 = [3, 4] mylst2 = [5] mylst += mylst1 print(mylst) [1, 2, 3, 4] mylst += mylst2 print(mylst) [1, 2, 3, 4, 5]Копировать список
Воспользуйтесь методом списков copy():
mylst = [1, 2, 3, 4, 5] mylst_copy = mylst.copy() print(mylst) [1, 2, 3, 4, 5] print(mylst_copy) [1, 2, 3, 4, 5]Либо создайте полный срез:
mylst = [1, 2, 3, 4, 5] mylst_copy = mylst[::] print(mylst) [1, 2, 3, 4, 5] print(mylst_copy) [1, 2, 3, 4, 5]Выполнить итерацию по списку
mylst = [1, 2, 3, 4, 5] for item in mylst: print(item) 1 2 3 4 5Итерацию еще выполняют с помощью цикла while:
mylst = [1, 2, 3, 4, 5] i = 0 while True: try: print(mylst[i]) except IndexError: print("Done!") break i += 1 1 2 3 4 5 Done!«Если вы думаете, что хорошо разбираетесь в списках, подумайте еще раз. Дело в том, что списки в Python больше похожи на то, что мы привыкли называть массивами в других языках программирования, а не на связанные списки, которые обычно приходят на ум при слове „список“».
«Изучаем программирование на Python»
По-настоящему хорошо изучить язык можно на курсе Skypro «Python-разработчик». Программа выстроена от простого к сложному: сначала необходимый минимум теории, а потом много практики, чтобы усвоить знания и отработать навыки. Всё это — с поддержкой опытных наставников и кураторов.
Методы списков
✔️ index
Позволяет узнать индекс элемента, возвращает его при первом совпадении:
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1] print(mylst.index(3)) 2✔️ count
Позволяет получить количество элементов списка:
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1] count_for_one = mylst.count(1) print(count_for_one) 2 count_for_five = mylst.count(5) print(count_for_five) 1✔️ clear
Полностью очищает список:
mylst = [1, 2, 3, 4, 5] mylst.clear() print(mylst) []✔️ sort
Сортирует список по указанному ключу. Принимает два необязательных аргумента: key — ключ, по которому производят сортировку, булевый флаг reverse — сортирует объекты в обратном порядке. По умолчанию в качестве ключа используют значение переменной:
mylst = [1, 3, 2, 4, 5] mylst.sort() # reverse=False print(mylst) [1, 2, 3, 4, 5]✔️ reverse
Инвертирует последовательность элементов:
mylst = [1, 2, 3, 4, 5] mylst.reverse() print(mylst) [5, 4, 3, 2, 1]✔️ pop
Позволяет получить элемент и удаляет его из списка. Принимает индекс в качестве необязательного аргумента. По умолчанию это последний элемент:
mylst = [1, 2, 3, 4, 5] x = mylst.pop() print(x) 5 print(mylst) [1, 2, 3, 4] y = mylst.pop(2) print(y) 3 print(mylst) [1, 2, 4]Встроенные функции
✅ Получение длины любой коллекции
Используйте функцию len():
mylst = [1, 2, 3, 4, 5] list_length = len(mylst) print(list_length) 5✅ Возврат элемента с максимальным значением
Используйте функцию max():
mylst = [1, 2, 3, 4, 5, 4, 3, 2, 1] max_value = max(mylst) print(max_value) 5✅ Возврат элемента с минимальным значением
Используйте функцию min():
mylst = [1, 2, 3, 4, 5] min_value = min(mylst) print(min_value) 1✅ Приведение к типу
Из любого итерируемого объекта можно получить список. Для этого передайте итерируемый объект функции list(). Этим объектом может быть строка, множество, кортеж или генератор:
myset = mytuple = (5, 6) mystring = "Test string" lst1 = list(myset) lst2 = list(mytuple) lst3 = list(mystring) print(lst1) [1, 2, 3, 4] print(lst2) [5, 6] print(lst3) ['T', 'e', 's', 't', ' ', 's', 't', 'r', 'i', 'n', 'g']Работа со срезами
Срезы позволяют создавать новые списки на основе существующего. Можно получить полную копию списка или некоторые элементы. Для этого используют шаг или указывают начальный и крайний индексы:
mylst = [1, 2, 3, 4, 5] mylst_slice_0 = mylst[::] # полная копия print(mylst_slice_0) [1, 2, 3, 4, 5] mylst_slice_1 = mylst[0:2] # крайний индекс (не включается в срез) print(mylst_slice_1) [1, 2] mylst_slice_2 = mylst[::2] # указание шага print(mylst_slice_2) [1, 3, 5]Синтаксис работы со срезами:
# имя переменной[стартовый индекс:конечный индекс:шаг] variable_name[start_index:end_index:step]Срезы часто используют в своей работе аналитики данных. Это позволяет им автоматизировать и ускорить решение некоторых задач. Основы Python для анализа данных можно освоить на курсе Skypro «Аналитик данных».
Генератор списков
Эта конструкция позволяет легко создавать списки:
mylst = [_ for _ in range(6)] print(mylst) [0, 1, 2, 3, 4, 5]Вы можете указать условия для генерации элементов:
mylst = [x if x % 2 == 0 else "odd" for x in range(20)] print(mylst) [0, 'odd', 2, 'odd', 4, 'odd', 6, 'odd', 8, 'odd', 10, 'odd', 12, 'odd', 14, 'odd', 16, 'odd', 18, 'odd']Списки python — функции и методы Python list()
В python списки хранят упорядоченный набор элементов, которые могут быть разных типов. В примере, указанном выше элементы имеют один и тот же тип int . Не обязательно все элементы должны быть одного типа.
# Создание списка с разными типам данных heterogenousElements = [3, True, 'Витя', 2.0]Этот список содержит int , bool , string и float .
Доступ к элементам списка
Каждый элемент имеет присвоенный ему индекс. Важно отметить, в python индекс первого элемента в списке — 0.
z = [3, 7, 4, 2] # создаем список # обращение к первому элементу списка с индексом 0 print(z[0]) # элемент с индексом 0 -> 3Также поддерживается отрицательная индексация. Отрицательная индексация начинается с конца. Иногда её удобнее использовать для получения последнего элемента в списке, потому что не нужно знать длину списка, чтобы получить доступ к последнему элементу.
# выведите последний элемент списка >>> print(z[-1]) 2Вы также можете получить доступ к одному и тому же элементу с использованием положительных индексов (как показано ниже). Альтернативный способ доступа к последнему элементу в списке z .
>>> print(z[3]) 2Срезы(slice) списка
Срезы хороши для получения подмножества значений с вашего списка. На примере кода, приведенного ниже, он вернет список с элементами из индекса 0 и не включая индекс 2.
# Создайте список z = [3, 7, 4, 2] # Вывод элементов с индексом от 0 до 2 (не включая 2) print(z[0:2]) # вывод: [3, 7]
# Все, кроме индекса 3 >>> print(z[:3]) [3, 7, 4]
Код, указанный ниже возвращает список с элементами начиная с индекса 1 до конца.
# начиная с индекса 1 до конца списка >>> print(z[1:]) [7, 4, 2]Изменение элементов в списке
Списки в Python изменяемы. Это означает, что после создания списка можно обновить его отдельные элементы.
z = [3, 7, 4, 2] # Создание списка # Изменяем элемент с индексом 1 на строку 'fish' z[1] = 'fish' print(z)[3, 'fish', 4, 2]Методы и функции списков python
У списков Python есть разные методы, которые помогают в программировании. В этом разделе рассматриваются все методы списков.
Метод Index
Метод index возвращает положение первого индекса, со значением х . В указанном ниже коде, он возвращает назад 0.
# Создайте список >>> z = [4, 1, 5, 4, 10, 4] >>> print(z.index(4)) 0
Вы также можете указать, откуда начинаете поиск.
>>> print(z.index(4, 3)) 3
Метод Count
Метод count работает так, как звучит. Он считает количество раз, когда значение появляется в списке.
>>> random_list = [4, 1, 5, 4, 10, 4] >>> print(random_list.count(4)) 3Метод Sort
Метод sort сортирует и меняет исходный список.
z = [3, 7, 4, 2] z.sort() print(z)[2, 3, 4, 7]
Вышеуказанный код сортирует список чисел от наименьшего к наибольшему. Код, указанный ниже, показывает, как вы можете сортировать список от наибольшего к наименьшему.
# Сортировка и изменение исходного списка от наивысшего к наименьшему z.sort(reverse = True) print(z)[7, 4, 3, 2]Следует отметить, что вы также можете отсортировать список строк от А до Я (или A-Z) и наоборот.
# Сортировка списка строками names = ["Стив", "Рейчел", "Майкл", "Адам", "Джессика", "Лестер"] names.sort() print(names)['Адам', 'Джессика', 'Лестер', 'Майкл', 'Рейчел', 'Стив']Метод Append
Метод append добавляет элемент в конец списка. Это происходит на месте.
z = [7, 4, 3, 2] z.append(3) print(z)[7, 4, 3, 2, 3]Метод Remove
z = [7, 4, 3, 2, 3] z.remove(2) print(z)Код удаляет первое вхождение значения 2 из списка z.
[7, 4, 3, 3]Метод Pop
Метод pop удаляет элемент в указанном индексе. Этот метод также вернет элемент, который был удален из списка. В случае, если вы не указали индекс, он по умолчанию удалит элемент по последнему индексу.
z = [7, 4, 3, 3] print(z.pop(1)) print(z)4 [7, 3, 3]Метод Extend
Метод extend расширяет список, добавляя элементы. Преимущество над append в том, что вы можете добавлять списки.
Добавим [4, 5] в конец z :z = [7, 3, 3] z.extend([4,5]) print(z)[7, 3, 3, 4, 5]То же самое можно было бы сделать, используя + .
>>> print([1,2] + [3,4]) [7, 3, 3, 4, 5]Метод Insert
Метод insert вставляет элемент перед указанным индексом.
z = [7, 3, 3, 4, 5] z.insert(4, [1, 2]) print(z)[7, 3, 3, 4, [1, 2], 5]Простые операции над списками
| Метод | Описаниее |
|---|---|
| x in s | True если элемент x находится в списке s |
| x not in s | True если элемент x не находится в списке s |
| s1 + s2 | Объединение списков s1 и s2 |
| s * n , n * s | Копирует список s n раз |
| len(s) | Длина списка s , т.e. количество элементов в s |
| min(s) | Наименьший элемент списка s |
| max(s) | Наибольший элемент списка s |
| sum(s) | Сумма чисел списка s |
| for i in list() | Перебирает элементы слева направо в цикле for |
Примеры использование функций со списками:
>>> list1 = [2, 3, 4, 1, 32] >>> 2 in list1 # 2 в list1? True >>> 33 not in list1 # 33 не в list1? True >>> len(list1) # количество элементов списка 5 >>> max(list1) # самый большой элемент списка 32 >>> min(list1) # наименьший элемент списка 1 >>> sum(list1) # сумма чисел в списке 42 # генератор списков python (list comprehension) >>> x = [i for i in range(10)] >>> print(x) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> print(list1.reverse()) # разворачивает список [32, 1, 4, 3, 2]Операторы + и * для списков
+ объединяет два списка.
list1 = [11, 33] list2 = [1, 9] list3 = list1 + list2 print(list3)[11, 33, 1, 9]* копирует элементы в списке.
list4 = [1, 2, 3, 4] list5 = list4 * 3 print(list5)[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]Оператор in и not in
Оператор in проверяет находится ли элемент в списке. При успешном результате он возвращает True , в случае неудачи, возвращает False .
>>> list1 = [11, 22, 44, 16, 77, 98] >>> 22 in list1 TrueАналогично not in возвращает противоположный от оператора in результат.
>>> 22 not in list1 FalseИтерация по списку с использованием цикла for
Список — последовательность. Ниже способ, которые вы можете использовать для цикла, чтобы перебрать все элементы списка.
list1 = [1,2,3,4,5] for i in list1: print(i, end=" ")1 2 3 4 5Преобразование списка в строку
Как преобразовать список в строку?
Для преобразования списка в строку используйте метод join(). В Python это выглядит так:
",".join(["a", "b", "c"]) -> "a,b,c" .
Разделитель пишут в кавычках перед join, в список должен состоять из строк.Вот несколько полезных советов для преобразования списка в строку (или любого другого итерабельного, такого как tuple ).
Во-первых, если это список строк, вы можете просто использовать join() следующим образом.
mylist = ['spam', 'ham', 'eggs'] print(', '.join(mylist))spam, ham, eggsИспользуя тот же метод, вы можете также сделать следующее:
>>> print('\n'.join(mylist)) spam ham eggsОднако этот простой метод не работает, если список содержит не строчные объекты, такие как целые числа. Если вы просто хотите получить строку с разделителями-запятыми, вы можете использовать этот шаблон:
list_of_ints = [80, 443, 8080, 8081] print(str(list_of_ints).strip('[]'))80, 443, 8080, 8081Или же этот, если ваши объекты содержат квадратные скобки:
>>> print(str(list_of_ints)[1:-1]) 80, 443, 8080, 8081В конце концов, вы можете использовать map() чтобы преобразовать каждый элемент в список строки и затем присоединиться к ним:
>>> print(', '.join(map(str, list_of_ints))) 80, 443, 8080, 8081 >>> print('\n'.join(map(str, list_of_ints))) 80 443 8080 8081Тест на знание списков в Python
Как создать список?
Все варианты верны
l = list(1, 2, 3)
l = list[1, 2, 3]
Что выведет этот код:a = [ 1, 342, 223, 'Африка', 'Очки']
print(a[-3])Что выведет этот код:
sample = [10, 20, 30]
sample.append(60)
sample.insert(3, 40)
print(sample)[10, 20, 30, 40, 60]
[60, 10, 20, 30, 40]
[10, 20, 30, 60, 40]
[10, 20, 30, 40]
Что выведет этот код:lake = ["Python", 51, False, "22"]
lake.reverse()
lake.reverse()
print(lake[-2])Что из перечисленного правда?
Элементы списка не могут повторятся
Мы можем вставить элемент на любую позицию в списке
Все элементы списка должны быть одного типа
Список не может содержать вложенных списков
Как получить ['bar', 'baz'] из спискаa = ['foo', 'bar', 'baz', 'qux', 'quux']print(a[1], a[2])
Как получить 'bar' из спискаx = [10, [3.141, 20, [30, 'baz', 2.718]], 'foo']Как избавиться от "3" в списке a = [1, 3, 5] и получить [1, 5] ?
С помощью какого метода можно добавить сразу два элемента в список?
Что вернет этот код [1, 2] * 3 ?
[[1, 2], [1, 2], [1, 2]]
[1, 2, 1, 2, 1, 2]
Поделитесь своим результатом через
Play againЯ создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
Python Q https://yandex.ru/q/loves/python Online
Python Q CEO Pythonru admin@pythonru.com https://secure.gravatar.com/avatar/b16f253879f7349f64830c64d1da4415?s=96&d=mm&r=g CEO Pythonru Python Александр Редактор https://t.me/cashncarryhttps://pythonru.com/https://yandex.ru/q/profile/cashnc/ PythonRu.com admin@pythonru.com Alex Zabrodin 2018-10-26 Online Python, Programming, HTML, CSS, JavaScript
Списки
Список Python является гибким в использовании объектом. Как инструмент, программист может использовать списки, например, для создания элементов линейной алгебры: точек, векторов, матриц, тензоров. Или, например, для таблицы с некоторыми данными.
Создание списка
Список можно создать при помощи литералов. Литерал - это код, который используется для создания объекта "вручную". Например, некоторые литералы уже изученных ранее объектов:
- int : 5 , -23
- float : 5. , 5.0 , -10.81 , -1.081e1
- str : 'ABCdef' , "ABCdef"
В случае списка литералом являются квадратные скобки [] , внутри которых через запятую , перечисляются элементы списка:
>>> [] [] >>> [0, 1, 2, 3, 4] [0, 1, 2, 3, 4] >>> ['sapere', 'aude'] ['sapere', 'aude'] >>> ['Gravitational acceleration', 9.80665, 'm s^-2'] ['Gravitational acceleration', 9.80665, 'm s^-2'] >>> type([])
Генератор списков
Зачастую требуется создать список, хранящий значения некоторой функции, например, квадратов чисел или арифметическую последовательность. Для этого можно воспользоваться синтаксическим сахаром Python - генератором списка:
>>> arithm = [ x for x in range(10) ] >>> squares = [ x**2 for x in range(10) ] >>> arithm [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> squares [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Однако злоупотреблять генераторами не стоит - если заполнение происходит по сложным правилам, лучше избежать использования генератора в пользу читаемости кода.
Метод list.append
Метод списков list.append (англ. добавить в конец), как следует из перевода, добавляет элемент в конец списка.
В примере ниже инициализируется пустой список fibs , а затем заполняется элементами:
>>> fibs = [] >>> fibs.append(1) >>> fibs [1] >>> fibs.append(1) >>> fibs [1, 1] >>> fibs.append(2) >>> fibs [1, 1, 2] >>> fibs.append(3) >>> fibs [1, 1, 2, 3]
Функция list
Аналогично функциям преобразования типов int() , float() , str() существует функция list() , создающая список из итерируемого объекта. Её можно использовать, например, для создания списка символов из строки:
>>> list("sapere aude") ['s', 'a', 'p', 'e', 'r', 'e', ' ', 'a', 'u', 'd', 'e'] >>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Элементы списка: доступ и изменение
Для доступа к элементам списка используется операция взятия элемента по индексу. Для этого рядом с литералом или переменной списка необходимо подписать индекс элемента в квадратных скобках:
>>> ['Gravitational acceleration', 9.80665, 'm s^-2'][0] 'Gravitational acceleration' >>> ['Gravitational acceleration', 9.80665, 'm s^-2'][1] 9.80665 >>> ['Gravitational acceleration', 9.80665, 'm s^-2'][2] 'm s^-2' >>> l = [10, 20, 30] >>> l[0] 10 >>> l[1] 20 >>> l[2] 30
Нумерация элементов списка начинается с нуля.
При запросе элемента по несуществующему индексу, происходит ошибка IndexError:
>>> l [10, 20, 30] >>> l[3] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range
Поэтому всегда нужно быть уверенным, что индексация не выходит за пределы длины списка. Получить её можно, как и для строк, с помощью функции len() :
>>> l [10, 20, 30] >>> len(l) 3 >>> l[len(l) - 1] 30
Последняя конструкция встречается нередко, поэтому в Python существует возможность взять элемент по отрицательному индексу:
>>> l [10, 20, 30] >>> l[-1] 30 >>> l[-2] 20 >>> l[-3] 10 >>> l[-4] Traceback (most recent call last): File "", line 1, in IndexError: list index out of range
Таким образом для индекса n ≥ 0, l[-n] эвивалентно l[len(l) - n] .
Изменение элементов
Изменение элементов осуществляется с помощью присваивания:
>>> l = [10, 20, 30] >>> l [10, 20, 30] >>> l[0] = 0 >>> l [0, 20, 30] >>> l[2] = 55 >>> l [0, 20, 55]
Доступ в цикле while
>>> l [0, 20, 55] >>> i = 0 >>> while i len(l): . print(i, l[i]) . i += 1 . 0 0 1 20 2 55 >>>
Доступ в цикле for
Наиболее универсальный способ это использование генератора range:
>>> l [0, 20, 55] >>> for i in range(len(l)): . print(i, l[i]) . 0 0 1 20 2 55
Питонизмы
Конструкции с использованием while и for , изложенные выше, имеют аналоги практически во всех языках программирования. Они универсальны, стандартны, переносимы из языка в язык.
Этот раздел относится только к особенностям языка Python.
Не злоупотребляйте питонизмами, наша цель - освоить алгоритмы и структуры данных, а не Python.
В языке Python цикл for на самом деле является синтаксическим сахаром, поддерживающим концепцию итерируемого объекта. Его обобщённый синтаксис выглядит примерно так:
for item in any_iterable: # тело цикла
Здесь item это выбранное программистом имя переменной итерирования, которая доступна в теле цикла. В начале каждой итерации в эту переменную помещается значение из any_iterable . Под any_iterable может стоять любой итерируемый объект.
Знакомые нам примеры итерируемых объектов:
- range - генератор арифметической последовательности, for "просит" новые значения у генератора, пока те не закончатся
- str - строковый тип, итерирование происходит по символам
- list - список, итерирование происходит по элементам
Таким образом, "pythonic way" пробега по списку может выглядеть так:
>>> l [0, 20, 55] >>> for elem in l: . print(elem) . 0 20 55
Отсюда видно, что программист в таком случае теряет удобный способ получить индекс элемента, если он ему нужен.
Под подобные мелкие задачи существует множество "питонизмов" - специфических для языка Python инструментов.
Один из примеров - enumerate - позволяет программисту получить в цикле индекс итерации (!) и сам элемент.
При таком использовании номер итерации совпадает с индексом элемента:
>>> l [0, 20, 55] >>> for i, elem in enumerate(l): . print(i, elem) . 0 0 1 20 2 55
Код приведённый для enumerate выше, аналогичен универсальным:
>>> l [0, 20, 55] >>> for i in range(len(l)): . elem = l[i] . print(i, elem) . 0 0 1 20 2 55
>>> l [0, 20, 55] >>> i = 0 >>> while i len(l): . elem = l[i] . print(i, elem) . i += 1 . 0 0 1 20 2 55
Соединение и копирование списков
Списки можно соединять in place, т.е. перезаписывая, с помощью метода list.extend :
>>> a [0, 1, 2] >>> b [3, 4, 5] >>> a.extend(b) >>> a [0, 1, 2, 3, 4, 5] >>> b [3, 4, 5]
Или соединять, создавая новый список из исходных:
>>> a [0, 1, 2] >>> b [3, 4, 5] >>> c = a + b >>> c [0, 1, 2, 3, 4, 5]
С копированием списков нужно быть осторожным. Python никогда не осуществляет копирование явно:
>>> a [0, 1, 2] >>> b = a >>> b [0, 1, 2] >>> b[0] = 123 >>> a [123, 1, 2] >>> b [123, 1, 2]
В строчке b = a лишь создаётся ещё одна ссылка на объект [0, 1, 2] , которая присваивается переменной b . В итоге a и b будут указывать на один и тот же объект.
Чтобы создать копию, необходимо поэлементно создать новый список из исходного. Например, с помощью функции list() :
>>> a = [0, 1, 2] >>> b = list(a) >>> a [0, 1, 2] >>> b [0, 1, 2] >>> b[0] = 123 >>> a [0, 1, 2] >>> b [123, 1, 2]
Ремарка о строках
На самом деле, мы уже ранее сталкивались со списками в предудыщих работах, когда использовали str.split :
>>> s = "ab cd ef1 2 301" >>> s.split() ['ab', 'cd', 'ef1', '2', '301']
Т.е. str.split , по умолчанию, разбивает строку по символам пустого пространства (пробел, табуляция) и создаёт список из получившихся "слов".
Загляните в help(str.split) , чтобы узнать, как изменить такое поведение, и разбивать строку, например, по запятым, что является стандартом для представления таблиц в файлах csv (comma separated values).
Методом, являющимся обратным к операции str.split является str.join . Он "собирает" строку из списка строк:
>>> s 'ab cd ef1 2 301' >>> l = s.split() >>> l ['ab', 'cd', 'ef1', '2', '301'] >>> l[-1] = '430' >>> l ['ab', 'cd', 'ef1', '2', '430'] >>> ','.join(l) 'ab,cd,ef1,2,430' >>> ' -- '.join(l) 'ab -- cd -- ef1 -- 2 -- 430'
Контест №5
Сайт построен с использованием Pelican. За основу оформления взята тема от Smashing Magazine. Исходные тексты программ, приведённые на этом сайте, распространяются под лицензией GPLv3, все остальные материалы сайта распространяются под лицензией CC-BY.




















