Списки в логическом контексте. Кортежи. Кортежи в логическом контексте
Списки в логическом контексте
Пустые списки — ложь, все остальные — истина.
Вы также можете использовать список в логическом контексте, например, в операторе 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, чтобы проверить существует ли элемент в кортеже.
|
Так где же могут пригодиться кортежи?
- Кортежи быстрее, чем списки. Если вы определяете неизменяемый набор значений и всё, что вы собираетесь с ним делать — итерировать по нему, используйте кортеж вместо списка.
- Кортежи делают код безопаснее в том случае, если у вас есть «защищенные от записи» данные, которые не должны изменяться. Использование кортежей вместо списков избавит вас от необходимости использовать оператор assert, дающий понять, что данные неизменяемы, и что нужно приложить особые усилия (и особую функцию), чтобы это обойти.
- Некоторые кортежи могут использоваться в качестве ключей словаря (конкретно, кортежи, содержащие неизменяемые значения, например, строки, числа и другие кортежи). Списки никогда не могут использоваться в качестве ключей словаря, потому что списки — изменяемые объекты.
| Кортежи могут быть преобразованы в списки и наоборот. Встроенная функция tuple() принимает список и возвращает кортеж из всех его элементов, функция list() принимает кортеж и возвращает список. По сути дела, tuple() замораживает список, а list() размораживает кортеж.
|
Кортежи в логическом контексте
Вы можете использовать кортежи в логическом контексте, например, в операторе if.
> > > def is_it_true(anything):
... if anything:
... print(" да, это истина" )
... else:
... print(" нет, это ложь" )
...
> > > is_it_true(()) ①
нет, это ложь
> > > is_it_true(('a', 'b')) ②
да, это истина
> > > is_it_true((False, )) ③
да, это истина
> > > type((False)) ④
< class 'bool'>
> > > type((False, ))
< class 'tuple'>
①
| В логическом контексте пустой кортеж является ложью.
|
②
| Любой кортеж состоящий по крайней мере из одного элемента — истина.
|
③
| Любой кортеж состоящий по крайней мере из одного элемента — истина. Значения элементов не важны. Но что делает здесь эта запятая?
|
④
| Чтобы создать кортеж из одного элемента, необходимо после него поставить запятую. Без запятой Python предполагает, что вы просто добавили еще одну пару скобок, что не делает ничего плохого, но и не создает кортеж.
|
Воспользуйтесь поиском по сайту: