Списки в логическом контексте

Пустые списки — ложь, все остальные — истина.

Вы также можете использовать список в логическом контексте, например, в операторе 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, чтобы проверить существует ли элемент в кортеже.

Так где же могут пригодиться кортежи?