Цель: научиться применять одномерные списки для решения задач.
Теория
Создание списка
Список - это набор упорядоченных и пронумерованных элементов. Каждый элемент списка - это значение любого встроенного или определённого программистом типа. В Python списки имеют тип list.
Самый простой способ создать список - заключить его элементы в квадратные скобки и разделить запятой:
В Python элементы списка не обязательно должны быть одного типа:
arr = [1, 2, True, [4, 5, 6]]
Чтобы объявить пустой список, квадратные скобки оставляют пустыми:
lst = [] # пустой список
Смешивание типов
Хорошей практикой считается не смешивать в списке значения разных типов, несмотря на то, что это не запрещено синтаксисом языка. Проще отладить код со списками, в которых хранятся значения одного типа.
Оператор индексирования списка
Элементы списка пронумерованы и к ним можно обращаться по их индексу. Нумерация элементов списка начинается с нуля.
Рисунок 1: Индексирование списка
Получить элемент списка по его индексу можно с помощью оператора [ ].
Верно. Отсчёт элементов начинается с 0. Список [56, 57, "Python"] и [ ] также считаются за один элемент.
Индекс пустого списка равен 4.
Отсчёт индексов начинается с 0. Индекс элемента False - 6.
Строка "Python" находится в списке, который сам по себе будет элементом списка alist. Весь этот вложенный список считается за один элемент списка alist.
Списки относятся к изменяемому типу данных. Мы можем заменить значение, которое находится по заданному индексу:
Элементами списка могут быть другие структурированные типы, длину которых также можно вычислить. Длина этих элементов не учитывается в расчёте длины списка:
Запустите код примера, чтобы увидеть результат работы оператора [:]. В этом примере чтобы получить срез из первых двух элементов списка нужно записать xa_list[:3].
Вопрос 1 из 2
✔
Что выведется на экран после выполнения следующей программы:
lang = ["Python", "JavaScript", "C++"]
print("Python" in lang)
print("Java" not in lang)
Разбиение и слияние строк
Два метода класса str тесно связаны с использованием списков.
С помощью метода split() можно разделить строку и получить список подстрок. Разделитель по умолчанию - пробел. Но в скобках можно указать произвольную строку-разделитель. Сам разделитель из строки удаляется.
q = [] # создаём пустой список
print(q)
# добавляем к списку два элемента
q.append("курсовая.doc")
q.append("фото.jpg")
print(q)
last = q.pop() # удаляем последний элемент списка
print("Последний элемент:", last)
print(q)
q.insert(0, "!ДИПЛОМ.docx") # вставляем элемент в начало списка
print(q)
Если мы захотим удалить из списка q первый элемент то запишем инструкцию xq.pop(0).
Операторы обработки списков собраны в следующей таблице:
Таблица 2: Инструкции и операторы для обработки списков
Инструкции и операторы
Значение
+
Конкатенация
*
Повторение
<список>[]
Индексирование
<список>[: ]
Срез
len(<список>)
Количество элементов
for <элемент> in <список>
Перебор символов
<выражение> in <список>
Проверка принадлежности (Boolean)
Тип данных Кортеж
В Python есть ещё один последовательный тип данных - кортеж (тип tuple). В отличие от списков, содержимое кортежа нельзя редактировать после создания:
1
2
3
data=(1,2,3)# создание кортежа
print(data[0])# обращение к элементу кортежа по индексу
data = []
print("Введите 5 чисел")
for i in range(5):
n = int(input('> '))
data.append(n) # добавляем число к списку
print("Список значений: ", data)
min = data[0]
for x in data:
if x < min:
min = x
print("Минимальное значение: ", min)
Список оценок будет храниться в переменной с именем xdata. С помощью цикла попросим пользователя пять раз ввести с клавиатуры оценку и сохраним её в переменную n. Затем с помощью метода списка append() добавим оценку в конец списка.
В девятой строке программы переменной min присвоим xпервый элемент списка data. Цикл for в десятой строке позволит перебрать все элементы списка и сравнить каждый элемент со значением в переменной min.
Пример № 2 (ex02.py)
Дан список из 10 случайных целых чисел в отрезке 0, 20. Отсортируйте список по возрастанию и убыванию и выведите результаты на экран. Для решения используйте стандартные методы для списков.
import random
data = []
for i in range(10):
n = random.randint(0, 20)
data.append(n) # добавляем число к списку
data.sort() # сортируем список
print(data)
data.reverse() # инвертируем порядок элементов
print(data)
Пример № 3 (ex03.py)
Пользователь вводит строку, которая содержит ASCII-коды, разделённые пробелом. Программа выводит на экран расшифрованное сообщение.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
inString=input("Введите сообщение: ")
message=[]# создаём пустой список
codes=inString.split(" ")# получаем список "чисел"
# перебираем все "числа" из кода
fornumStrincodes:
# преобразуем строку в число
codeNum=int(numStr)
# добавляем раскодированный символ к итоговому сообщению
inString = input("Введите сообщение: ")
message = [] # создаём пустой список
codes = inString.split(" ") # получаем список "чисел"
# перебираем все "числа" из кода
for numStr in codes:
# преобразуем строку в число
codeNum = int(numStr)
# добавляем раскодированный символ к итоговому сообщению
message.append(chr(codeNum))
# получаем из списка букв одну строку
messageStr = "".join(message)
print(f"Текст сообщения: {messageStr}")
Раскодируйте сообщение, скрытое в этом коде:
90 110 97 110 105 101 32 45 32 115 105 108 97 33
Задания для самостоятельной работы
Задание № 1 (sam01.py)
Пользователь вводит целое число n - количество элементов в списке. Затем программа просит пользователя ввести n чисел и сохраняет их в списке. Вывести на экран только чётные числа, хранящиеся в списке.
Для определения чётности числа пригодится оператор получения остатка от деления %. Если остаток деления на 2 равен нулю, значит число чётное.
Решение может содержать два цикла for. Один для ввода чисел, второй - для поиска и вывода чётных чисел.
# ввод количества чисел nn =int(input("Введите количество чисел (n): "))# создаём пустой список lstlst = []# запускаем цикл for, который выполнится n разfor i inrange(n):num =int(input("Введите число: "))# добавляем введёное число в список lstlst.append(num)print(lst)print("Чётные числа:")for i in lst:if i %2==0:print(i)
Задание № 2 (sam02.py)
Пользователь вводит целое число n - количество элементов в списке. Программа создаёт список из n случайных чисел из диапазона от -10 до 10 и выводит их на экран. После этого выведите на экран элементы списка стоящие на позициях с чётными номерами.
Дополнительный плюс, если не будет использован оператор if.
Пример:
Введите количество чисел (n): 4
Содержимое списка: [-6, -2, 5, -8]
Числа с чётными номерами:
-6
5
Задание № 3 (sam03.py)
Два друга попросили помочь вам с покупками. Каждый из них прислал вам свой список продуктов (3 продукта). Разработайте программу которая позволит ввести в две отдельные переменные списки продуктов, соединит эти списки и отсортирует общий список по алфавиту. Отсортированный список должен быть выведен на экран следующим образом:
каждый элемент с новой строки;
каждый элемент пронумерован по-порядку.
Пример:
Введите продукты из первого списка (3 шт.)
молоко
хлеб
шоколадка
Введите продукты из второго списка (3 шт.)
масло
пельмени
макароны
Общий список: ['молоко', 'хлеб', 'шоколадка', 'масло', 'пельмени', 'макароны']
1. макароны
2. масло
3. молоко
4. пельмени
5. хлеб
6. шоколадка
Задание № 4 (sam04.py)
Вам дали задание найти максимальную и минимальную оценку за тест. Программа просит пользователя ввести n - количество оценок. После этого программа просит ввести n оценок. В итоге программа выводит максимальную и минимальную оценку.
Создайте программу, которая создаёт аббревиатуру по введённым словам. Буквы в аббревиатуре должны быть большими.
Примеры:
Введите строку: запоминающее устройство
Аббревиатура: ЗУ
Введите строку: открытое акционерное общество
Аббревиатура: ОАО
Введите строку: Белорусский Государственный Педагогический Университет
Аббревиатура: БГПУ
Задание № 6 (sam06.py)
Пользователь вводит целое число n - количество элементов в списке. Затем программа просит пользователя ввести n чисел и сохраняет их в списке. Программа формирует новый список в котором сначала идут положительные, затем отрицательные числа исходного списка. Порядок положительных и отрицательных чисел должен совпадать с порядком в оригинальном списке. Выведите новый список на экран.
Уведомление
Исходные числа должны быть переставлены либо в исходном списке, либо расположены в новом списке.
Пользователь вводит текст. Программа рассчитывает среднюю длину слов и выводит её на экран.
Пример:
Введите текст: Они работали в институте, который занимался прежде всего проблемами
человеческого счастья и смысла человеческой жизни, но даже среди них никто точно не знал,
что такое счастье и в чём именно смысл жизни. И они приняли рабочую гипотезу, что счастье
в непрерывном познании неизвестного и смысл жизни в том же.
Средняя длина слова в тексте: 5.29
Форматированный вывод
Для того чтобы вывести определённое количество знаков после запятой в вещественных числах, используйте f-строки с таким форматом:
f"{3.1415:0.2f}"
Число после точки определяет количество знаков после запятой.