""" Урок 18. Знакомство со списками — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/18-python-lists-intro/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-18.py """ # ==================================================================== # Пример 1. Создание списка: литерал, list() и пустой список # ==================================================================== literal_list = [1, 2, 3, 4, 5] empty_list_1 = [] empty_list_2 = list() from_string = list("python") from_range = list(range(0, 10, 2)) print(literal_list) print(empty_list_1, empty_list_2) print(from_string) print(from_range) # [1, 2, 3, 4, 5] # [] [] # ['p', 'y', 't', 'h', 'o', 'n'] # [0, 2, 4, 6, 8] # ==================================================================== # Пример 2. Список хранит элементы любых типов # ==================================================================== mixed = [42, "Python", 3.14, True, [1, 2, 3]] print(mixed) print(type(mixed[0]), type(mixed[1]), type(mixed[4])) # [42, 'Python', 3.14, True, [1, 2, 3]] # # ==================================================================== # Пример 3. Индексация: с начала и с конца # ==================================================================== fruits = ["apple", "banana", "cherry", "date"] print(fruits[0]) # apple print(fruits[3]) # date print(fruits[-1]) # date print(fruits[-4]) # apple # ==================================================================== # Пример 4. Срезы: [start:stop:step] # ==================================================================== numbers = [0, 1, 2, 3, 4, 5, 6] print(numbers[1:4]) # [1, 2, 3] — с индекса 1 по 3 print(numbers[::2]) # [0, 2, 4, 6] — каждый второй элемент print(numbers[::-1]) # [6, 5, 4, 3, 2, 1, 0] — список в обратном порядке print(numbers[-4:-1]) # [3, 4, 5] — отрицательные границы print(numbers[:]) # [0, 1, 2, 3, 4, 5, 6] — полная копия списка # ==================================================================== # Пример 5. Изменение элемента по индексу и по срезу # ==================================================================== items = ["pen", "pencil", "marker", "eraser"] items[1] = "brush" print(items) # ['pen', 'brush', 'marker', 'eraser'] items[2:4] = ["ruler", "sharpener", "glue"] print(items) # ['pen', 'brush', 'ruler', 'sharpener', 'glue'] # ==================================================================== # Пример 6. len(), конкатенация + и повторение * # ==================================================================== list1 = [1, 2, 3] list2 = [4, 5, 6] combined = list1 + list2 print(combined) # [1, 2, 3, 4, 5, 6] print(len(combined)) # 6 repeated = [1, 2, 3] * 2 print(repeated) # [1, 2, 3, 1, 2, 3] matrix = [[0, 0]] * 3 matrix[0][0] = 9 print(matrix) # [[9, 0], [9, 0], [9, 0]] — изменилась КАЖДАЯ строка # ==================================================================== # Пример 7. Проверка вхождения: in и not in # ==================================================================== numbers = [1, 2, 3, 4, 5] print(3 in numbers) # True print(6 in numbers) # False print(6 not in numbers) # True fruits = ["apple", "banana", "cherry"] print("apple" in fruits) # True print("app" in fruits) # False — ищет целый элемент, а не часть строки # ==================================================================== # Пример 8. Перебор циклом for и вложенный цикл # ==================================================================== words = ["cat", "dog", "bird"] for word in words: print(f"Word: {word}") for letter in word: print(letter, end=" ") print() # Word: cat # c a t # Word: dog # d o g # Word: bird # b i r d # ==================================================================== # Пример 9. Методы append, insert, extend # ==================================================================== basket = ["apple", "banana"] basket.append("cherry") print(basket) # ['apple', 'banana', 'cherry'] basket.insert(1, "kiwi") print(basket) # ['apple', 'kiwi', 'banana', 'cherry'] more_fruits = ["fig", "grape"] basket.extend(more_fruits) print(basket) # ['apple', 'kiwi', 'banana', 'cherry', 'fig', 'grape'] basket_2 = ["apple", "banana"] basket_2.append(more_fruits) print(basket_2) # ['apple', 'banana', ['fig', 'grape']] — список добавлен ЦЕЛИКОМ # ==================================================================== # Пример 10. Методы remove и pop # ==================================================================== colors = ["red", "green", "blue", "green"] colors.remove("green") print(colors) # ['red', 'blue', 'green'] — удалилось первое вхождение last = colors.pop() print(last, colors) # green ['red', 'blue'] first = colors.pop(0) print(first, colors) # red ['blue'] try: colors.remove("yellow") except ValueError as error: print("ValueError:", error) # ValueError: list.remove(x): x not in list # ==================================================================== # Пример 11. Вложенные списки: список списков # ==================================================================== matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(matrix[0]) # [1, 2, 3] — целая строка print(matrix[1][2]) # 6 — строка 1, столбец 2 for row in matrix: print(row) # [1, 2, 3] # [4, 5, 6] # [7, 8, 9] # ==================================================================== # Пример 12. Границы применимости: IndexError и поведение среза # ==================================================================== short_list = [10, 20, 30] try: print(short_list[5]) except IndexError as error: print("IndexError:", error) # IndexError: list index out of range print(short_list[1:10]) # [20, 30] — срез не кидает ошибку