Списки


Методы списков Практика


  • Список — это объект, который содержит некоторое количество элементов данных. Список является разновидностью последовательности в 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