Списки
Список — это объект, который содержит некоторое количество элементов данных. Список является разновидностью последовательности в Python
Список — изменяемый (мутабельный, иногда: мутируемый) тип данных
Каждая "порция" данных в списке называется элементом
Каждый элемент имеет индекс. Индексирование начинается с 0
[159, 152, 12, 1, 128] # список целых чисел
[15.9, 14.2. 1.2, 1.0] # список чисел с плавающей точкой
['Даша', 'Ксюша', 'Сергей'] # список строк
['Даша', 142, 19.0] # смешанный список
[[1, 0, 2], [14, 2, 15], ['Сергей', 'Даша'], []] # список списков
a = [], b = list()
~# создание нового списка
list("python")
~# ['p', 'y', 't', 'h', 'o', 'n']
b = list([True, False])
~# b = [True, False] - создание копии списка
len(), min(), max(), sum()
sum(t) / len(t)
~# вычисление среднего значения списка
sorted(t)
~# создание нового, отсортированного по возрастанию списка
sorted(t, reverse=True)
~# использование аргумента reverse для сортировки по убыванию
del lst[2]
~# удаление элемента списка по индексу
Присвойте переменной test значение в виде списка, содержащего элементы
всех известных вам типов данных
Конкатенация и повторение списков
[1, 2, 3] + [2, 'декабрь', 4.0]
~# [1, 2, 3, 2, 'декабрь', 4.0]
[1, 2, 3] * 2
~# [1, 2, 3, 1, 2, 3]
list_1 = [1, 2, 3, 4, 5]
list_1[0] # 1
list_1[1] # 2
type(list_1) # list
# Запустите программу. Проанализируйте результат.
list1 = [1, 2, 3]
print(list1 + 50)
numbers = [1, 2, 3, 4, 5]
print(numbers)
~# [1, 2, 3, 4, 5]
numbers[0] = 99
print(numbers)
~# [99, 2, 3, 4, 5]
say_hello = ['Hello', 'Sergey', 'Petrov']
say_hello[2] = 'Sergeev'
print(say_hello)
~# ['Hello', 'Sergey', 'Sergeev']
list(range(5)) # преобразуем последовательность в список
list() # работает с любым итерируемым объектом
Попросите пользователя ввести данные. Преобразуйте их в список и выведите на экран
Перебирание элементов списка в цикле
for переменная in список:
инструкция
инструкция
...
# всякую итерацию переменная ссылается на копию элемента в списке,
# начиная с первого элемента
numbers = list(range(1, 10, 2))
for n in numbers:
print(n)
numbers = list(range(5))
for num in numbers:
num **= num
print(num)
cities = ["Moscow", "Berlin", "Varshava", "Kiev", "Minsk"]
for city in cities:
if city[0] == 'M':
print(city, end=' ')
# Как найти количество элементов в списке?
# функция len() - используем всегда его:
my_list = [1, 2, 3, 4, 5]
count = len(my_list)
# в цикле for при помощи счетчика
my_list = [1, 2, 3, 4, 5]
count = 0
for el in my_list:
count += 1
# в цикле while, при помощи метода pop()
my_list = [1, 2, 3, 4, 5]
count = 0
while my_list:
count += 1
my_list.pop()
l1 = [1, 2, 3, 4]
l1.append(5)
# [1, 2, 3, 4, 5]
# Как можно оптимизировать этот код?
colors = ["Yellow", "Blue", "Green"]
if "Red" in colors:
print(colors)
else:
colors.append("Red")
print(colors)
numbers = list(range(10))
for num in numbers:
if num not in [2, 4, 6, 8]:
print(num)
У Татьяны есть список покупок: хлеб, молоко, квас, сок и сыр.
Напишите три подпрограммы, который выводят на экран продукт, если он:
- не является напитком;
- начинается на "с"
- количество букв в нём больше 3
Методы
Обратите внимание, когда метод что-то возвращает, а когда --- нет. Если метод что-то возвращает, то возвращаемый объект можно присвоить переменной.
a = [1, 2, 3]
a.append(значение) # добавляет значение к списку a, меняя исходный
# список, то же самое что a[len(a):] = [x]
a.extend(iterable) # добавляет список к списку, то же самое, что
# a[len(a):] = iterable
a.insert(index, новое значение) # вставляет значение на место значения с
# индексом index
a.remove(Значение) # удалит из списка первое "значение". Внимание!
# Булевы значения приводятся к цифрам 0 и 1. Ничего не возвращает
a.pop() # без значения удалит последний элемент, возвращая его.
# Со значением - с индексом - удалится значение с указанным индексом
a.clear() # очищает список
c.count(значение) # находит число элементов с указанным значением
c.index(значение, [start[, end]]) # возвращает индекс первого значения
# без второго аргумента. Вернет ошибку при несуществующем значении. Для
# проверки рекомендовано использовать оператор in - "значение" in "список"
c.clear() # эквивалент del a[:]
Подробнее в документации
1. Какими способами можно удалить элемент из списка? Чем отличаются эти способы?
2. Какими способами можно добавить элемент в список?
3. Что может быть элементом в списке?
Преобразование строк в списки и наоборот
# преобразование списка в строку
a = ['h', 'e', 'l', 'l', 'o']
s = ''.join(a)
# причем аргумент функции - список, который нужно собрать,
# а применяется метод к строке, которая станет разделителем.
# преобразование строки в список
s = "Hello, world!"
l = s.split()
# аргументом можно передать символ-разделитель. по умолчанию - пробел
Копирование списков
list1 = [1, 2, 3, 4]
list2 = list1
print(list1)
#[1, 2, 3, 4]
print(list2)
#[1, 2, 3, 4]
list1[0] = 99
print(list1)
#[99, 2, 3, 4]
print(list2)
#[99, 2, 3, 4]
Правильные способы копирования списков:
a = [1, 2]
c = a.copy()
c = a[:]
c = list(a) # три способа копировать список.
# так мы получаем истинные копии - с разными id
Сортировка списков
c.reverse() # меняет список на обратный
c.sort() # выполняет сортировку значений по возрастанию,
# или корректнее "по неубыванию", изменяя текущий список, в отличии от
# функции sorted(c), которая возвращает новый список
c.sort(reverse=True) # получим обратную сортировку.
# Строки в списке сравниваются по лексико-графическому порядку
Вложенные списки
t = [[0, 1], [1, 2], [2, 3], [3, 4]]
t[0][2] # обращение ко вложенному списку
img = [1, 2, 3, 4, 5]
img[1] = [0, 0, 0, 0, 0] # добавить в список img НОВЫЙ список
img[1][:] = [1] * 5 # меняется второй элемент на вложенный список из пяти единиц
del img[1][0] # работает также - удаление элемента по индексу
List comprehensions (списковые включения)
Выражение, которое создает новый список путем обхода элементов существующего списка в цикле
Понятие «list comprehensions» это такой способ уместить цикл for, блок if и присваивание в одну строку
общий формат: [выражение_результата выражение_итерации]
l1 = [0, 2, 4, 6, 8, 10]
l2 = []
for el in l1:
l2.append(el)
print(l2)
# [0, 2, 4, 6, 8, 10]
l2 = [el for el in l1]
print(l2)
# [0, 2, 4, 6, 8, 10]
list comprehension + if
list1 = [1, 12, 2, 20, 3, 15, 4]
list2 = []
for n in list1:
if n < 10:
list2.append(n)
list2 = [item for item in list1 if item < 10] # добавляем условие
list1 = [1, 12, 2, 20, 3, 15, 4]
list2 = [n for n in list1 if n > 10]
list3 = [n*2 for n in list1]
# Какое значение будет у list2 и у list3?
создание вложенных списков при помощи списковых включений:
[[x, y] for x in [1,2,3] for y in [3,1,4] if x != y]
# аналогично такой записи:
# res = []
#
# for x in [1,2,3]:
# for y in [3,1,4]:
# if x != y:
# res.append([x, y])
#
# [[1, 3], [1, 4], [2, 3], [2, 1], [2, 4], [3, 1], [3, 4]]
Практика
1. Создайте список в диапазоне (0, 100) с шагом 1.
Свяжите его с переменной. Извлеките из него срез с 20 по 30 элемент включительно.
2. Пользователь вводит числа до тех пор, пока не введет 0.
Сохраните все числа в список и и выведите на экран наибольшее и наименьшее из них.
3. Пользователь вводит 3 числа. Добавьте эти числа в список и выведите на экран
числа и их индексы.
4. Пользователь вводит строку, состоящую из нескольких слов. Сохраните слова в списке,
затем выведите список, содержащий только уникальные слова (без повторений)
Пример:
ввод: hello world world hello
вывод: ['hello', 'world']
5. Секретный агент.
В тексте зашифрован код. Для его расшифровки нужны все слова, в
которых больше 4 гласных букв.
Найдите их в тексте, добавьте в список и выведите на экран.
Текст доступен по ссылке:
https://disk.yandex.ru/d/QnBkKT6JY1D3AA
6. Кулинарное приключение.
Напишите программу, которая в тексте рецепта находит продукты: мясо, молоко и яйца.
Если они есть, результат может быть следующим:
- Рецепт не подходит, если вы не едите мясо
- Рецепт не подходит, если вы не едите мясо, молоко
- Рецепт не подходит, если вы не едите молоко, яйца
И так далее.
Если их нет, результат:
- Рецепт подходит для строгих вегетарианцев
Примеры рецептов доступны по ссылке:
https://disk.yandex.ru/d/KuDevhtVb0Na_g
7. Выбор школьника.
Дан список предметов: химия, алгебра, геометрия, русский язык,
литература, биология, физкультура. Предложите школьнику отказаться от
трех предметов (введя их названия с клавиатуры). Удалите эти предметы из
списка, выведите на экран получившийся список.
Last updated