В Python есть отличный встроенный тип списка под названием «список». Литералы списка записываются в квадратных скобках [ ]. Списки работают аналогично строкам — для доступа к данным используйте функцию len() и квадратные скобки [ ] с индексом 0 для первого элемента. (См. официальную документацию списка python.org .)
colors = ['red', 'blue', 'green'] print(colors[0]) ## red print(colors[2]) ## green print(len(colors)) ## 3
Присваивание с = в списках не создает копию. Вместо этого присваивание заставляет две переменные указывать на один список в памяти.
b = colors ## Does not copy the list
«Пустой список» — это просто пустая пара скобок []. «+» используется для добавления двух списков, поэтому [1, 2] + [3, 4] дает [1, 2, 3, 4] (это похоже на + со строками).
ДЛЯ и В
Конструкции Python *for* и *in* чрезвычайно полезны, и первое их использование, которое мы увидим, связано со списками. Конструкция *for* — for var in list
— это простой способ просмотреть каждый элемент в списке (или другой коллекции). Не добавляйте и не удаляйте из списка во время итерации.
squares = [1, 4, 9, 16] sum = 0 for num in squares: sum += num print(sum) ## 30
Если вы знаете, что именно находится в списке, используйте в цикле имя переменной, которая фиксирует эту информацию, например «номер», «имя» или «url». Поскольку в коде Python нет другого синтаксиса, напоминающего вам о типах, имена переменных — это ключевой способ понять, что происходит. (Это немного вводит в заблуждение. По мере того, как вы больше знакомитесь с Python, вы будете видеть ссылки на подсказки типов , которые позволяют вам добавлять информацию о вводе в определения ваших функций. Python не использует эти подсказки типов при запуске ваших программ. Они используются другими программами, такими как IDE (интегрированные среды разработки) и инструментами статического анализа, такими как линтеры/проверщики типов, для проверки того, вызываются ли ваши функции с совместимыми аргументами.)
Конструкция *in* сама по себе — это простой способ проверить, появляется ли элемент в списке (или другой коллекции) — value in collection
— проверяет, находится ли значение в коллекции, возвращая True/False.
list = ['larry', 'curly', 'moe'] if 'curly' in list: print('yay') ## yay
Конструкции for/in очень часто используются в коде Python и работают с типами данных, отличными от списка, поэтому вам следует просто запомнить их синтаксис. У вас могут быть привычки из других языков, когда вы начинаете вручную перебирать коллекцию, тогда как в Python вам следует просто использовать for/in.
Вы также можете использовать for/in для работы со строкой. Строка действует как список своих символов, поэтому for ch in s: print(ch)
печатает все символы строки.
Диапазон
Функция range(n) возвращает числа 0, 1,... n-1, а range(a, b) возвращает a, a+1,... b-1 - до последнего числа, но не включая его. . Комбинация цикла for и функции range() позволяет построить традиционный числовой цикл for:
## print the numbers from 0 through 99 for i in range(100): print(i)
Существует вариант xrange(), который позволяет избежать затрат на построение всего списка для случаев, чувствительных к производительности (в Python 3 range() будет иметь хорошее поведение по производительности, и вы можете забыть о xrange()).
Пока цикл
В Python также имеется стандартный цикл while, а операторы *break* и *continue* работают так же, как в C++ и Java, изменяя ход самого внутреннего цикла. Вышеупомянутые циклы for/in решают распространенный случай перебора каждого элемента в списке, но цикл while дает вам полный контроль над номерами индексов. Вот цикл while, который обращается к каждому третьему элементу списка:
## Access every 3rd element in a list i = 0 while i < len(a): print(a[i]) i = i + 3
Получение списка методов
Вот некоторые другие распространенные методы списков.
- list.append(elem) — добавляет один элемент в конец списка. Распространенная ошибка: не возвращает новый список, а просто изменяет исходный.
- list.insert(index, elem) — вставляет элемент по заданному индексу, сдвигая элементы вправо.
- list.extend(list2) добавляет элементы из списка list2 в конец списка. Использование + или += в списке аналогично использованию метода Extend().
- list.index(elem) — ищет заданный элемент с начала списка и возвращает его индекс. Выдает ValueError, если элемент не отображается (используйте «in», чтобы проверить без ValueError).
- list.remove(elem) — ищет первый экземпляр данного элемента и удаляет его (выдает ValueError, если его нет)
- list.sort() — сортирует список на месте (не возвращает его). (Предпочтительнее использовать функцию sorted(), показанную ниже.)
- list.reverse() — переворачивает список на место (не возвращает его)
- list.pop(index) — удаляет и возвращает элемент по заданному индексу. Возвращает самый правый элемент, если индекс опущен (примерно противоположно методу add()).
Обратите внимание, что это *методы* объекта списка, а len() — это функция, которая принимает список (или строку, или что-то еще) в качестве аргумента.
list = ['larry', 'curly', 'moe'] list.append('shemp') ## append elem at end list.insert(0, 'xxx') ## insert elem at index 0 list.extend(['yyy', 'zzz']) ## add list of elems at end print(list) ## ['xxx', 'larry', 'curly', 'moe', 'shemp', 'yyy', 'zzz'] print(list.index('curly')) ## 2 list.remove('curly') ## search and remove that element list.pop(1) ## removes and returns 'larry' print(list) ## ['xxx', 'moe', 'shemp', 'yyy', 'zzz']
Распространенная ошибка: обратите внимание, что приведенные выше методы не *возвращают* измененный список, они просто изменяют исходный список.
list = [1, 2, 3] print(list.append(4)) ## NO, does not work, append() returns None ## Correct pattern: list.append(4) print(list) ## [1, 2, 3, 4]
Создание списка
Один из распространенных шаблонов — начать список как пустой список [], а затем использовать метод add() или Extend() для добавления в него элементов:
list = [] ## Start as the empty list list.append('a') ## Use append() to add elements list.append('b')
Получение списка фрагментов
Срезы работают со списками так же, как со строками, и их также можно использовать для изменения частей списка.
list = ['a', 'b', 'c', 'd'] print(list[1:-1]) ## ['b', 'c'] list[0:2] = 'z' ## replace ['a', 'b'] with ['z'] print(list) ## ['z', 'c', 'd']
Упражнение: list1.py
Чтобы попрактиковаться в материале этого раздела, попробуйте решить задачи в list1.py , в которых не используется сортировка (в разделе «Основные упражнения »).