Списки в логическом контексте
Пустые списки — ложь, все остальные — истина.
Вы также можете использовать список в логическом контексте, например, в операторе if:
>>> def is_it_true(anything):
... if anything:
... print("да, это истина")
... else:
... print("нет, это ложь")
...
>>> is_it_true([]) ①
нет, это ложь
>>> is_it_true(['a']) ②
да, это истина
>>> is_it_true([False]) ③
да, это истина
① | В логическом контексте пустой список — ложь. |
② | Любой список, состоящий хотя бы из одного элемента, — истина. |
③ | Любой список, состоящий хотя бы из одного элемента, — истина. Значения элементов не важны. |
Кортежи
Кортеж — это неизменяемый список. Кортеж не может быть изменён никаким способом после его создания.
>>> a_tuple = ("a", "b", "mpilgrim", "z", "example") ①
>>> a_tuple
('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple[0] ②
'a'
>>> a_tuple[-1] ③
'example'
>>> a_tuple[1:3] ④
('b', 'mpilgrim')
① | Кортеж определяется так же, как список, за исключением того, что набор элементов заключается в круглые скобки, а не в квадратные. |
② | Элементы кортежа заданы в определённом порядке, как и в списке. Элементы кортежа индексируются с нуля, как и элементы списка, таким образом первый элемент не пустого кортежа — это всегда a_tuple[0]. |
③ | Отрицательные значения индекса отсчитываются от конца кортежа, как и в списке. |
④ | Создание среза кортежа («slicing») аналогично созданию среза списка. Когда создаётся срез списка, получается новый список; когда создаётся срез кортежа, получается новый кортеж. |
Основное отличие между кортежами и списками состоит в том, что кортежи не могут быть изменены. Говоря техническим языком, кортеж — неизменяемый объект. На практике это означает, что у них нет методов, которые бы позволили их изменить. У списков есть такие методы, как append(), extend(), insert(), remove(), и pop(). У кортежей ни одного из этих методов нет. Можно взять срез от кортежа (так как при этом создастся новый кортеж), можно проверить, содержит ли кортеж элемент с конкретным значением (так как это действие не изменит кортеж), и... собственно, всё.
# продолжение предыдущего примера
>>> a_tuple
('a', 'b', 'mpilgrim', 'z', 'example')
>>> a_tuple.append("new") ①
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'append'
>>> a_tuple.remove("z") ②
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'remove'
>>> a_tuple.index("example") ③
4
>>> "z" in a_tuple ④
True
Перевод сообщений оболочки:
Раскрутка стека (от внешних к внутренним):
Файл "<интерактивный ввод>", строка 1, позиция ?
AttributeError: у объекта 'tuple' нет атрибута '<атрибут>'
① | Вы не можете добавить элементы к кортежу. Кортежи не имеют методов append() или extend(). |
② | Вы не можете удалять элементы из кортежа. Кортежи не имеют методов remove() или pop(). |
③ | Вы можете искать элементы в кортежи, поскольку это не изменяет кортеж. |
④ | Вы также можете использовать оператор in, чтобы проверить существует ли элемент в кортеже. |
Так где же могут пригодиться кортежи?