5.5. Другие распространенные операции со спискамиТакже у списков есть несколько других часто используемых методов, которые не относятся ни к какой конкретной категории.
5.5.1. Проверка принадлежности оператором inЧтобы легко определить, присутствует ли некоторое значение в списке, воспользуй-тесь оператором in , возвращающим логическое значение. Также можно выполнить обратную проверку с оператором not in :
>>> 3 in [1, 3, 4, 5]
True
>>> 3 not in [1, 3, 4, 5]
False
>>> 3 in ["one", "two", "three"]
False
>>> 3 not in ["one", "two", "three"]
True
5.5.2. Конкатенация списков оператором +Чтобы создать список слиянием двух существующих списков, используйте опе-ратор + (оператор конкатенации списков), который оставляет исходные списки-аргументы без изменений:
>>> z = [1, 2, 3] + [4, 5]
>>> z
[1, 2, 3, 4, 5]
5.5.3. Инициализация списков оператором *Оператор * создает список заданного размера, инициализированный заданным значением. Эта операция типична для больших списков, размер которых известен заранее. И хотя вы можете использовать append для добавления элементов и ав-томатического расширения списка по мере необходимости, эффективнее будет использовать * для определения правильного размера списка в начале работы про-граммы. Если размер списка остается неизменным, это позволяет избежать затрат на перемещение данных в памяти:
>>> z = [None] * 4
>>> z
[None, None, None, None]
При таком использовании списков оператор * (который в данном контексте на-зывается оператором умножения списков ) повторяет список заданное количество раз и объединяет все копии для формирования нового списка. Это стандартный способ опережающего определения списков заданного размера в языке Python. В умножении списков часто используется список, содержащий один экземпляр None , но содержимое списка может быть любым:
>>> z = [3, 1] * 2
>>> z
[3, 1, 3, 1]
5.5.4. Получение наименьшего или наибольшего элемента функциями min и max
Функции min и max используются для нахождения наименьшего и наибольшего элемента в списке. Вероятно, чаще всего вы будете использовать функции min и max с числовыми списками, но они могут применяться к спискам, содержащим элементы любых типов. Попытка определить наименьший или наибольший объ-ект в множестве объектов разных типов приведет к ошибке, если сравнение этих типов не имеет смысла:
>>> min([3, 7, 0, -2, 11])
-2
>>> max([4, "Hello", [1, 2]])
Traceback (most recent call last):
File "", line 1, in
max([4, "Hello",[1, 2]])
TypeError: '>' not supported between instances of 'str' and 'int'
5.5.5. Поиск в списках и метод index
Если вы хотите узнать, в какой позиции списка находится некоторое значение (то есть недостаточно знать, присутствует значение в списке или нет), используйте метод index . Этот метод ищет в списке элемент, эквивалентный заданному значе-нию, и возвращает позицию этого элемента:
>>> x = [1, 3, "five", 7, -2]
>>> x.index(7)
3
>>> x.index(5)
Traceback (innermost last):
File "", line 1, in ?
ValueError: 5 is not in list
Как видно из этого примера, при попытке определить позицию несуществующего элемента происходит ошибка. Эта ошибка обрабатывается точно так же, как и ана-логичная ошибка, которая может происходить при вызове remove (то есть проверкой списка оператором in перед вызовом index ).
5.5.6. Подсчет вхождений методом countМетод count также проводит поиск заданного значения по списку, но вместо по-зиционной информации возвращает количество вхождений значения в список: >>> x = [1, 2, 2, 3, 5, 2, 5]
>>> x.count(2)
3
>>> x.count(5)
2
>>> x.count(4)
5.5.7. Сводка операций со списками
Как видите, списки представляют собой чрезвычайно мощные структуры данных, которые по своим возможностям далеко превосходят старые добрые массивы. Опе-рации со списками играют настолько важную роль в программировании на Python, что я для удобства приведу их краткую сводку в табл. 5.1. Таблица 5.1. Операции со списками
Если вы будете знать основные операции со списками, ваша жизнь как програм-миста Python заметно упростится.
БЫСТРАЯ.ПРОВЕРКА:.ОПЕРАЦИИ.СО.СПИСКАМИ Какой результат вернет вызов len([[1,2]] * 3)?
Опишите два различия между оператором in и методом index() списков? Какой из следующих вызовов приведет к выдаче исключения: min(["a", "b", "c"]) ; max([1, 2, "three"]) ; [1, 2, 3].count("one") ?
ПОПРОБУЙТЕ.САМИ:.ОПЕРАЦИИ.СО.СПИСКАМИ Имеется список x . Напишите код безопасного удаления элемента в том — и толь-ко в том! — случае, если значение присутствует в списке. Измените код так, чтобы элемент удалялся только в том случае, если элемент присутствует в списке более чем в одном экземпляре.
Читать дальше