Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- name = "Дарья"
- # Для создания списка используются квадратные скобочки
- some_list = [0, 1.2345, "строка", ["список внутри списка"], name]
- # К спискам работают индексы и возвращают они элемент списка:
- print(some_list[0])
- # 0
- print(some_list[3])
- # ['список внутри списка']
- # К спискам работают срезы и возвращают они обрезанный список:
- print(some_list[0:2])
- # [0, 1.2345]
- print(some_list[3:])
- # [['список внутри списка'], 'Дарья']
- # Списки можно складывать и умножать
- # Сложение:
- a = [1, 2]
- b = [3, 4]
- print(a+b)
- # [1, 2, 3, 4]
- # Умножение:
- a = [1, 2] * 3
- print(a)
- # [1, 2, 1, 2, 1, 2]
- b = [0] * 6
- print(b)
- # [0, 0, 0, 0, 0, 0]
- # А теперь про подводные камни
- # Программисты часто используют со списками срез вида [:],
- # чтобы скопировать содержимое списка.
- # Что это значит и почему просто не переназначить?
- # Сейчас разберёмся!
- # Создаём список:
- some_list = [0, 1, 2]
- # Создаём copy_list с содержимым some_list
- copy_list = some_list
- # Выводим оба списка:
- print("some: " + str(some_list))
- # some: [0, 1, 2]
- print("copy: " + str(copy_list))
- # copy: [0, 1, 2]
- # Видите разницу? Ну конечно же нет, поскольку мы ничего не изменяли.
- # А теперь добавим к скопированному списку цифру 3:
- copy_list.append(3)
- # И выведем оба списка:
- print("some: " + str(some_list))
- # some: [0, 1, 2, 3]
- print("copy: " + str(copy_list))
- # copy: [0, 1, 2, 3]
- # Заметили? Мы добавляли значение к списку copy_list, а добавился он и в some_list.
- # Чтобы такой хрени не происходило достаточно использовать для копирования [:]
- # Перепишем код, но с использованием [:]
- some_list = [0, 1, 2]
- copy_list = some_list[:] # вот тут мы добавляем [:]
- copy_list.append(3) # Добавляем цифру 3
- print("some: " + str(some_list))
- # some: [0, 1, 2]
- print("copy: " + str(copy_list))
- # copy: [0, 1, 2, 3]
- # Проблема решена!
- # Функция list(переменная)
- # При помощи list мы можем переводить разные виды данных к спискам
- # Пример:
- # строка является набором символов и при попытке применить list()
- # мы получим список из символов.
- x = "Маша"
- print( list(x) )
- # ['М', 'а', 'ш', 'а']
- # Некоторые типы данных мы не можем переводить к спискам.
- # Пример:
- # Числа являются одним целым, при попытке разбить их на
- # список выйдет ошибка
- # print( list(123) )
- # Traceback (most recent call last):
- # File "main.py", line 69, in <module>
- # print(list(123))
- # TypeError: 'int' object is not iterable
- # Но как тогда поменять к примеру первый элемент числа на 10?
- num = 123
- # Сначала мы переводим число к строке
- num = str(123) # '123'
- # Теперь мы делаем список этой строки
- num = list(num) # ['1', '2', '3']
- # Смело меняем первый элемент списка на '10'
- num[0] = '10' # ['10', '2', '3']
- # Теперь осталось только как-то всё обратно соединить и перевести
- # в число...
- # У строки есть ещё пара команд, о которых я умолчал в предыдущем уроке,
- # т.к. без знания списков они абсолютно бесполезны.
- # строка.split(разделитель)
- # Эта функция делит строку на список,
- # используя в качестве элементов списка значения между разделителями.
- # По умолчанию разделитель пробел
- # Сам разделитель в список не входит!
- # Пример 1:
- # Разделим предложение на слова,
- # используя в качестве разделителя пробел.
- text = "Шла Маша по шоссе и сосала сушку"
- text_list = text.split() # По умолчанию разделитель пробел
- print(text_list)
- # ['Шла', 'Маша', 'по', 'шоссе', 'и', 'сосала', 'сушку']
- # Пример 2:
- # Найдём основной адрес в ссылке.
- # 1. Мы знаем, что каждый адрес в начале имеет https://
- # 2. Сразу после этой конструкции идёт основной адрес.
- # 3. После основного адреса через символы слеша (/) идут каталоги сайта
- site = "https://www.vk.com/feed"
- # Обрежем начало
- site = site[7:] # "www.vk.com/feed"
- # Создадим список из этой строки с разделителем "/"
- site = site.split("/") # ['www.vk.com', 'feed']
- # Выведем основной адрес через индекс
- print(site[0])
- # www.vk.com
- # разделитель.join(список)
- # Эта функция собирает список в строку, вставляя между элементами разделитель.
- # Пример:
- text_list = ['Шла', 'Маша', 'по', 'шоссе', 'и', 'сосала', 'сушку']
- text = " ".join(text_list)
- print(text)
- # Шла Маша по шоссе и сосала сушку
- # Цикл for и списки
- # Записывается, как:
- # for переменная in итеррируемый_объект:
- # тело_цикла
- # переменная - создаётся переменная, которая каждый новый цикл цикла
- # будет меняться.
- # Если мы не хотим использовать переменную достаточно написать вместо
- # неё нижнее подчёркивание (_).
- # итеррируемый_объект - любой объект, который поддерживает индексацию,
- # примеры итеррируемых_объектов: строка, список, генератор и т.д.
- # тело_цикла - код, который будет выполняться каждый новый цикл.
- # Генератор range(start, stop, step) # эквивалентен x[start:stop:step],
- # где x - бесконечная последовательность цифр.
- # Генерирует значения от start до stop (не включительно) с шагом step
- # Чтобы вывести значение генератора надо обязательно использовать функцию list()
- # Другие виды записи range:
- # range(stop) # эквивалентен x[:stop]
- # range(start, stop) # эквивалентен x[start:stop]
- # Пример:
- print(list(range(10)))
- # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- # Генератор range очень часто используется вместе с циклом for
- # Пример:
- for index in range(1, 11):
- print("Вывод номер " + str(index))
- # Вывод номер 1
- # Вывод номер 2
- # ...
- # Вывод номер 10
- # При помощи цикла for можно генерировать списки.
- # Пример 1:
- # Сгенерируем список с последовательностью Фибоначчи до 100го элемента.
- # Последовательность Фибоначчи:
- # первые два числа равны 0 и 1,
- # а каждое последующее число равно сумме двух предыдущих чисел.
- # 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, ...
- fibonacci = [0, 1]
- for _ in range(100):
- next_num = fibonacci[-1] + fibonacci[-2]
- fibonacci.append(next_num)
- print(fibonacci)
- # Пример 2:
- # Сгенерируем список квадратов чисел от 0 до 20
- # Возведение в степень записывается оператором **
- nums = []
- for i in range(21):
- nums.append(i**2)
- print(nums)
- # [0, 1, 4, 9, 16, 25, ... 361, 400]
- # Циклы которые генерируют списки и у которых в теле 1 строка можно
- # представить в виде:
- # some_list = [тело_цикла for переменная in итеррируемый_объект]
- # Решение "примера 2" с генерацией в одну строку:
- nums = [i**2 for i in range(21)]
- print(nums)
- # [0, 1, 4, 9, 16, 25, ... 361, 400]
- # Циклы внутри других циклов
- # Циклы можно встраивать в тело другого цикла
- # Пример:
- # Нам дана 2х мерная матрица matrix:
- matrix = [["Т","с","л","п"], ["ы","а","у","л"], [" ","м","ч","ю"], [" ","ы","ш","и"], [" ","й","и","к"], [" "," ","й"," "]]
- # Чтобы красиво её вывести в виде реальной матрицы
- # следует использовать цикл вложенный в другой цикл.
- # P.S. В данном случае более разумно использовать
- # один цикл и "|".join(line_list), но я хочу
- # показать, что можно использовать и 2 цикла
- # Цикл для координаты y (для каждой строки переносит строку)
- for y in range(len(matrix)):
- line_list = matrix[y] # Получаем список с индексом y
- # Строка линии, которую мы будем выводить
- # в конце каждого цикла
- line_text = "|"
- # Цикл для координаты x
- for x in range(len(line_list)):
- # Добавляем к line_text элемент матрицы с координатами x и y
- # а после добавляем визуальный (декоративный) разделитель
- line_text += matrix[y][x] + "|"
- print(line_text)
- # Вывод программы:
- # |Т|с|л|п|
- # |ы|а|у|л|
- # | |м|ч|ю|
- # | |ы|ш|и|
- # | |й|и|к|
- # | | |й| |
- # Я надеюсь вы смогли понять скрытое послание
- # Пример кода, который улучшает визуальный вид чисел.
- num = 1234567890
- # переводим к списку символов
- num = list(str(num))
- # Это хитрой строкой мы получим индексы [9, 6, 3, 0]
- indexes = list(range(len(num)))[::-3]
- for i in indexes:
- # добавляем после символов с индексами,
- # которые мы нашли пробел.
- num[i] = num[i] + " "
- # переводим строку к списку
- num = "".join(num)
- print(num)
- # 1 234 567 890
- # Вуаля, число 1234567890 преобрело
- # более читаемый вид
- # Задания для проверки:
- # 1. Дано переменная abc с именем и отчеством:
- abc = "Аркадий Семёнович"
- # 1.1. Разбейте строку на список и выведите имя (первый элемент списка)
- # 1.2. Поменяйте имя в списке на "Николай"
- # 1.3. Выведите новое имя и отчество одной строкой не используя сложение
- # 2. Выведите при помощи 2х циклов следующую таблицу из 9ти цифр:
- # 1 2 3
- # 4 5 6
- # 7 8 9
- # 3. Дан список пар, где первое слово всегда девушка, а третье мужчина:
- data = ["Маша и Паша", "Саша и Игорь", "Лиза и Кирилл", "Катя и Алексей", ""]
- # 3.1. Выведите при помощи цикла for для каждой пары:
- # "ЖЕН и МУЖ живут вместе"
- # 3.2. Создайте списки только из мужчин и только из женщин.
- # 3.3. Выведите всех мужчин через запятые и в конце напишите "живут одни.":
- # "МУЖ, МУЖ, МУЖ, ... МУЖ живут одни."
- # 3.4. Выведите всех женщин через запятые, но вместо последней запятой напишите "и"
- # в конце напишите "весело проводят вместе время!"
- # "ЖЕН, ... ЖЕН, ЖЕН и ЖЕН весело проводят вместе время!"
- # Подсказки:
- # 1.1. Используйте .split()
- # 1.2. Переопределите элемент списка с индексом 0
- # 1.3. Используйте " ".join()
- # 2. Достаточно сложное задание, надо использовать 2 цикла и 2 переменных.
- # Первую переменную надо использовать как номер строки,
- # а вторую как номер столбца. И не забыть добавить +1.
- # Из чего вытекает, что значение элемента some_list[y][x] должно быть: y*3 + x + 1
- # 3.1. Это не должно быть проблемой...
- # 3.2. Надо создать 2 пустых списка, к примеру: wom и men,
- # к каждой строке применить функцию split()
- # без аргументов (тогда индексы 0 и 2 то, что вы ищите) или
- # с аргументом " и " (тогда индексы 0 и 1 то, что вы ищете)
- # и при помощи функции wom.append и men.append добавлять мужчин
- # и женщин в разные списки.
- # 3.3. Тут надо использовать ", ".join(men) и добавить окончание строки.
- # 3.4. Тут делать то же самое, что и в прошлом примере, но для всех, кроме
- # последней. Для последней надо вручную написать " и " + wom[i] и
- # добавить окончание строки из задания.
Add Comment
Please, Sign In to add comment