Списки и списковые включения в Python
Рассмотрим методы, которые чаще всего используются для обработки списков, и покажем, как легко можно решать разнообразные задачи с помощью списковых включений. ← Часть 4 Методы работы со строками Список в Python – это структура данных для хранения последовательности, состоящей из чисел, строк, отдельных символов. Такие последовательности могут быть как однородными (состоящими из данных одного типа), так и смешанными: Значения, из которых состоит список, называются элементами списка. К элементам списка можно обращаться по индексам (нумерация, как и в случае со строками, всегда начинается с 0), отрицательная нумерация также поддерживается: Как и при работе со строками, для операций со списками можно использовать срезы: Списки аналогичны массивам в других языках программирования. Списки бывают одномерными и многомерными – на практике чаще всего встречаются двумерные (матрицы): Индексация элементов в многомерных списках аналогична математической – за исключением того, что нумерация начинается с 0, а не с 1. Для обращения к нужному элементу необходимо указать номер столбца и строки: Для сложных математических операций с многомерными массивами обычно используют специальную библиотеку NumPy. Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста» Интересно, перейти к каналу Есть несколько способов создать список – данные можно ввести вручную, сгенерировать, преобразовать из какого-либо другого типа с помощью встроенных функций list() или split(). Рассмотрим все эти способы подробнее. Список с данными создается простым перечислением нужных значений в квадратных скобках Для создания пустого списка достаточно объявить его название и указать на тип с помощью квадратных скобок или встроенной функции list(): Уже упомянутая функция list() позволяет преобразовать строку в список: При этом list() можно комбинировать с другими функциями. Так можно разделить вводимую строку на отдельные символы: Во многих случаях для преобразования строки в список достаточно split(): С помощью split() можно разбить строку по определенным разделителям – по умолчанию это пробел: Разделитель, отличный от пробела, указывают в одинарных или двойных кавычках: Использование strip() обеспечивает удаление ненужных пробелов в начале и конце строки, а map() применяет нужную функцию ко всем элементам списка. В приведенном ниже примере map() применяет int() к каждому символу строки, преобразовывая строковые символы в целые числа: При необходимости список можно сгенерировать. Самый простой метод – использовать встроенную функцию range(), которая обеспечит автоматическое создание списка, включающего значения из определенного диапазона: Другой метод генерации списка – использование list comprehension (списковое включение). В приведенном ниже примере список создается из четных чисел, входящих в определенный диапазон: А здесь список составляется из чисел, возведенных в квадрат: Поскольку списковые включения позволяют создавать списки по определенным правилам и условиям, их часто используют в качестве компактной замены циклов for и условий if, которые мы будем рассматривать позже: При стандартном использовании print() элементы выводятся в кавычках (если это строковые данные) и в квадратных скобках. Избавиться от кавычек и скобок поможет оператор распаковки Для вывода в столбик пригодится разделитель Список – очень удобная структура данных, а разнообразие методов работы со списками в Python позволяет легко и элегантно решить любую практическую задачу по хранению и обработке последовательностей. Перечислим самые полезные методы. Функции max() и min() могут принимать дополнительные параметры, например, длину Сумма элементов списка – sum(): Сортировка по возрастанию и убыванию – sort() и sort с ключом reverse=True: Перестановка элементов в обратном порядке – reverse(): Добавление элемента append() и расширение списка другим списком – extend(): Подсчет количества всех элементов списка len() и подсчет определенных элементов count(): Удаление элемента по индексу – del() и по значению – remove(): Удаление и возврат последнего элемента – pop(): Если указать индекс элемента, он будет удален вместо последнего: Удаление всех элементов списка – clear(): Вставка элемента в определенную позицию – insert(): Индекс первого вхождения элемента index() в списке или в диапазоне: Создание поверхностной копии списка – copy(): Объединение элементов списка в строку – join(): Этот метод мы уже рассматривали в предыдущей статье – он относится одновременно и к методам списков, и методам строк: Параллельная обработка списков – zip(): Напишите программу, которая получает на вход строку, выбирает из нее все числа, и выводит: Пример ввода: Вывод: Решение: Напишите программу, которая: Пример ввода: Вывод: Решение: Напишите программу, которая: Примечание: «не равно» в Python обозначается с помощью Пример ввода: Вывод: Решение: Напишите программу, которая: Гарантируется, что ошибочная буква не встречается в других частях слова, то есть программа будет получать на вход слова типа «коллллектив», а не «комммунизм». Пример ввода 1: Вывод: Пример ввода 2: Вывод: Примечание: в print() можно использовать условия if и else, например: Решение: Напишите программу, которая: Пример ввода: Вывод: Решение: Напишите программу, которая: Пример ввода: Вывод: Решение: Напишите программу, которая получает на вход строку, и формирует из нее 2 списка: Выведите результат в две строки без кавычек и скобок. Пример ввода: Вывод: Решение: Имеются два списка: Напишите программу, которая объединяет эти списки и выводит на экран список такого вида: Решение: Напишите программу, которая получает на вход строку, содержащую имя ученика и его отметки по основным предметам, и выводит средний балл успеваемости. Пример ввода: Вывод: Примечание: для вывода двух знаков после запятой в f-строках используется параметр Решение: Игрушечный робот передвигается в соответствии с командами, получаемыми в виде строки вида Пример ввода: Вывод: Решение: В этой статье мы изучили основные (и самые полезные) методы работы со списками и списковыми включениями. Списковые включения отлично заменяют циклы с условиями и делают код максимально лаконичным. В следующей статье расскажем про методы работы со словарями. *** ***
my_list1 = [1, 2, 3, 4, 5] my_list2 = ['P', 'y', 't', 'h', 'o', 'n'] my_list3 = ['адрес', 'телефон', 'имя'] my_list4 = ['Евгений', 23, 'разработчик', 1.77]
>>> my_lst = ['P', 'y', 't', 'h', 'o', 'n'] >>> print(my_lst[2]) t >>> print(my_lst[-3]) h
>>> lst = [1, 3, 2, 4, 5] >>> print(lst[::-1]) [5, 4, 2, 3, 1] >>> print(lst[1:4]) [3, 2, 4]
matrix = [[2, 4, 6, 8, 10], [3, 6, 9, 12, 15], [4, 8, 12, 16, 20]] matrix2 = [[12, 14, 16, 18, 10], [13, 16, 19, 12, 15], [14, 18, 12, 16, 20]]
>>> lst = [[1, 3, 2], [4, 5, 6], [7, 8, 9], [2, 1, 8], [7, 3, 4]] >>> print(lst[2][2]) 9
Создание и ввод списков
Первый способ: указание значений списка вручную
[]
:
num_list = [5, 15, 25, 0, 6] symb_list = ['a', 'b', 'c', 'd']
spisok = [] my_lst = list()
Второй способ: преобразование других типов данных в список
>>> my_lst = list('Python') >>> print(my_lst) ['P', 'y', 't', 'h', 'o', 'n']
>>> sp = list(input()) Я изучаю Python >>> print(sp) ['Я', ' ', 'и', 'з', 'у', 'ч', 'а', 'ю', ' ', 'P', 'y', 't', 'h', 'o', 'n']
>>> sp = 'Разработка ПО на языке Python'.split() >>> print(sp) ['Разработка', 'ПО', 'на', 'языке', 'Python']
>>> sp = input().split() Я изучаю методы списков >>> print(sp) ['Я', 'изучаю', 'методы', 'списков']
>>> lst = input().split(';') номер;модель;цена;количество >>> print(lst) ['номер', 'модель', 'цена', 'количество']
>>> my_lst = list(map(int, input().strip().split())) 3 4 5 2 3 4 5 6 1 2 8 >>> print(my_lst) [3, 4, 5, 2, 3, 4, 5, 6, 1, 2, 8]
Третий способ: генерация списков
>>> my_lst = list(range(5)) >>> print(my_lst) [0, 1, 2, 3, 4] >>> my_lst = list(range(1, 25, 2)) >>> print(my_lst) [1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23]
>>> my_lst = [i for i in range(1, 51) if i % 2 == 0] >>> print(my_lst) [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50]
>>> sqr = [i ** 2 for i in range(20)] >>> print(sqr) [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361]
>>> my_str = '6emds83mmsad99342n42ld9xm37vn4820' >>> my_lst2 = [i for i in my_str if i.isnumeric()] >>> print(my_lst2) ['6', '8', '3', '9', '9', '3', '4', '2', '4', '2', '9', '3', '7', '4', '8', '2', '0']
Вывод и распаковка списка
*
:
>>> lst = [1, 2, 3, 4, 5] >>> lst2 = ['a', 'b', 'c', 'd', 'e'] >>> print(*lst) 1 2 3 4 5 >>> print(*lst2) a b c d e
/n
:
>>> my_lst = list('JavaScript') >>> print(*my_lst, sep='n') J a v a S c r i p t
Основные методы списков
Максимальный и минимальный элемент списка – max() и min():
>>> sp = [5, 6, 2, 90, 12, 0, 4, 1, 3] >>> print(max(sp), min(sp)) 90 0
key=len
:
>>> lst = ['яблоко', 'апельсин', 'дыня'] >>> print(max(lst, key=len)) апельсин >>> print(min(lst, key=len)) дыня
>>> sp = [5, 3, 2, 1, 9, 0, 7] >>> print(sum(sp)) 27
>>> lst = [7, 6, 0, 9, 5, 3, 2, 8, 1] >>> lst.sort() >>> print(lst) [0, 1, 2, 3, 5, 6, 7, 8, 9] >>> lst.sort(reverse=True) >>> print(lst) [9, 8, 7, 6, 5, 3, 2, 1, 0] >>> my_lst = ['яблоко', 'ананас', 'груша'] >>> my_lst.sort() >>> print(my_lst) ['ананас', 'груша', 'яблоко'] >>> my_lst.sort(reverse=True) >>> print(my_lst) ['яблоко', 'груша', 'ананас']
>>> lst = ['м', 'о', 'н', 'и', 'т', 'о', 'р'] >>> lst.reverse() >>> print(lst) ['р', 'о', 'т', 'и', 'н', 'о', 'м']
>>> lst = ['a', 'b', 'c'] >>> lst.append('d') >>> print(lst) ['a', 'b', 'c', 'd'] >>> lst2 = ['k', 'l', 'm'] >>> lst.extend(lst2) >>> print(lst) ['a', 'b', 'c', 'd', 'k', 'l', 'm']
>>> lst = ['a', 'b', 'r', 'a', 'c', 'a', 'd', 'a', 'b', 'r', 'a'] >>> print(len(lst)) 11 >>> print(lst.count('a')) 5
>>> lst = ['п', 'р', 'о', 'г', 'р', 'а', 'м', 'м', 'а'] >>> del lst[5] >>> del lst[-1] >>> print(lst) ['п', 'р', 'о', 'г', 'р', 'м', 'м'] >>> lst.remove('г') >>> print(lst) ['п', 'р', 'о', 'р', 'м', 'м'] >>> del lst[2:4] >>> print(lst) ['п', 'р', 'м', 'м']
>>> lst = ['м', 'о', 'н', 'и', 'т', 'о', 'р'] >>> print(lst.pop()) р
>>> lst = ['н', 'о', 'у', 'т', 'б', 'у', 'к'] >>> lst.pop(3) 'т' >>> lst.pop(5) 'к' >>> print(lst) ['н', 'о', 'у', 'б', 'у']
>>> lst = ['к', 'у', 'р', 'с'] >>> lst.clear() >>> print(lst) []
>>> lst = ['П', 'т', 'о', 'н'] >>> lst.insert(1, 'а') >>> lst.insert(2, 'й') >>> print(lst) ['П', 'а', 'й', 'т', 'о', 'н']
>>> lst = ['н', 'о', 'у', 'т', 'б', 'у', 'к'] >>> print(lst.index('у')) 2 >>> print(lst.index('у', 3, 6)) 5
>>> lst = [1, 2, 3, [5, 6]] >>> lst2 = lst.copy() >>> print(lst2) [1, 2, 3, [5, 6]]
>>> lst = ['|', '|', '|', '|', '|', '|'] >>> print('***'.join(lst)) |***|***|***|***|***| >>> print('_'.join(lst)) |_|_|_|_|_| >>> print(''.join(lst)) ||||||
>>> list1 = [3, 4, 1, 2, 7] >>> list2 = [6, 9, 2, 5, 3] >>> list3 = [i + j for i, j in zip(list1, list2)] >>> print(list3) [9, 13, 3, 7, 10]
Практика
Задание 1
5rff09832ejwfdew09f034
0 9 43
lst = [int(i) for i in input() if i.isdigit()] print(min(lst), max(lst), sum(lst), sep='n')
Задание 2
3 4 5 1 2 3 6 7 4 8 9 4 5 6 6
3 4 5 3 6 4 4 5 6 6
st = [int(i) for i in input().split()] lst = [i for i in st if st.count(i) > 1] print(*lst)
Задание 3
!=
.
3,4,2,7,8,9,1,11,2,56,2,6,81
3 7 9 1 11 81 4 2 8 2 56 2 6
st = [int(i) for i in input().split(',')] lst_odd = [i for i in st if i % 2 != 0] lst_even = [i for i in st if i % 2 == 0] print(*lst_odd) print(*lst_even)
Задание 4
Не могу исправить
.
колллаборация
Буква "л" ошибочно повторяется 1 раз(а) Исправленное слово: коллаборация
Дилемммма
Буква "м" ошибочно повторяется 2 раз(а) Не могу исправить
print("вариант 1" if i > 5 else "вариант 2")
st = list(input()) err = [st.index(i) for i in st if st.count(i) > 2] letter = st[err[0]] st.remove(letter) print(f'Буква "{letter}" ошибочно повторяется {len(err) - 2} раз(а)') print(f'Исправленное слово: {"".join(st)}' if len(err) == 3 else 'Не могу исправить')
Задание 5
#
;#
по индексу;
Без труд#а не выловишь и рыбку из пруда
Без труда не выловишь и рыбку из пруда Выловишь
st = list(input()) err = st.index('#') del st[err] sp = ''.join(st) word = max(sp.split(), key=len) print(sp, word, sep='n')
Задание 6
фрукты образцовый груз@вик цветы невз56годы дер#ево задачка виноградник грозовой зима яб7локо
зима цветы фрукты задачка грозовой образцовый виноградник
sp = input().split() sp = [i for i in sp if i.isalpha()] sp.sort(key=len) print(*sp, sep='n')
Задание 7
кот ёж море ель береза апельсин бирюза имитация
ёж ель апельсин имитация кот море береза бирюза
vowels = 'аиеёоуыэюя' st = input().split() lst1 = [i for i in st if i[0] in vowels] lst2 = [i for i in st if i not in lst1] print(*lst1) print(*lst2)
Задание 8
keys = ['модель', 'цена', 'количество', 'размер', 'цвет', 'скидка'] values = ['XXLDude', 5678.00, 57, 'XXL', 'черный', '12%']
модель: XXLDude цена: 5678.55 количество: 57 размер: XXL цвет: черный скидка: 12%
keys = ['модель', 'цена', 'количество', 'размер', 'цвет', 'скидка'] values = ['XXLDude', 5678.55, 57, 'XXL', 'черный', '12%'] res = [key + ': ' + str(value) for key, value in zip(keys, values)] print(*res, sep='n')
Задание 9
Вася Пупкин, 4 5 3 4 5 3 4 5
Вася Пупкин, средний балл: 4.12
:.2f
.
lst = input().split(', ') grades = [int(i) for i in lst[1].split()] avg = sum(grades) / len(grades) print(f'{lst[0]}, средний балл: {avg:.2f}')
Задание 10
n35 s48 e88 w33 n12 s10
, где n – север, s – юг, w – запад, e – восток, а цифры – расстояние в сантиметрах. Напишите программу для определения x и y координат робота. Будем считать, что движение всегда начинается с 0, 0
.
n15 e12 s32 e18 w27 n50 s5 e45
x: 48, y: 28
route = input().split() s = sum([int(i[1:]) for i in route if i[0] == 's']) n = sum([int(i[1:]) for i in route if i[0] == 'n']) w = sum([int(i[1:]) for i in route if i[0] == 'w']) e = sum([int(i[1:]) for i in route if i[0] == 'e']) print(f'x: {e - w}, y: {n - s}')
Подведем итоги
📖 Содержание самоучителя
Материалы по теме
- 0 views
- 0 Comment