Как создать кортеж пустого кортежа в Python?

Как я могу создать кортеж, состоящий из пустого кортежа, т.е. (())? Я пробовал tuple(tuple()), tuple(tuple(tuple())), tuple([]) и tuple(tuple([])), которые все дали мне ().

Причина, по которой я использую такую ​​вещь, такова: предположим, что у вас есть n сумки с элементами m. Чтобы представить список предметов в сумке, я использую tuple длины n, где каждый элемент этого кортежа является представителем для мешка. Мешок может быть пустым, который помечен (). Теперь, в какой-то начальной точке, у меня есть только один мешок с пустыми предметами!

Ответы

Ответ 1

Пустой кортеж is () (или более многословный и более медленный tuple()), а кортеж с одним элементом (например, целое число 1), называемый синглтоном (см. Здесь и здесь), равен (1,). Следовательно, кортеж, содержащий только пустой кортеж,

((),)

Вот некоторые результаты, показывающие, что работает:

>>> a=((),)
>>> type(a)
<type 'tuple'>
>>> len(a)
1
>>> a[0]
()
>>> type(a[0])
<type 'tuple'>
>>> len(a[0])
0

Ответ 2

Я не удивлен, что этот (()) не работал, поскольку внешние круглые скобки интерпретируются как скобки. Итак, (()) == (), как и (2) == 2. Это должно работать, однако:

((),)

Ответ 3

tuple() является единственным подлинным пустым кортежем, но() и ((),) создают кортеж длины 1, который содержит кортеж длины 0 - но не сам кортеж длины ноль.

Если вы хотите получить ответ на вопрос "как создать пустой (или нулевой длины) кортеж... Я нашел этот пост с поиском" как создать пустой кортеж ", то понял, что это не тот же вопрос, но мог быть ошибочно принятым за этот вопрос (как и при поиске), поэтому я хотел бы дать ответ на:

Как вы просто создаете пустой кортеж?

исходный вопрос может ввести вас в заблуждение, так как исходные ответы почти достаточно хороши, как пустой кортеж, но не пройдут один тест.

(), создаст "пустой" кортеж, как предложено в предыдущих ответах с ((),), который также будет работать, как и (((((((),)))))) на самом деле вы можете использовать любое число из внешних скобок вы выбираете, они просто работают как скобки. Однако при печати кортежа python добавляет один набор внешних скобок.

пустые скобки - это нестандартное представление 'no value', а добавление запятой в конце делает кортеж из 'no value'. Но это кортеж с записью 'no value', а не пустой кортеж.

Примечание. Это не кортеж нулевой длины, как показали другие примеры. Внешний кортеж - это кортеж с одним значением, просто у этого значения есть пустой кортеж. Таким образом, это создает пустой кортеж внутри другого кортежа, а другой кортеж не является пустым. Для истинно пустого кортежа, используйте tuple() хотя() ведет себя примерно так же, это не совсем правильно.

>>>  a = (),
>>> type(a)
<class 'tuple'>
>>> len(a)
1
>>> a
((),)
>>> len(a[0])  # the inside tuple is empty, just not the outside one
0

Аналогично, для кортежа длины 1, но со значением (ноль в случае b и "" для примера с c)

>>> b = 0,
>>> type(b)
<class 'tuple'>
>>> len(b)
1
>>>b
(0,)
# now with an empty string
>>> c = "",
>>> type(c)
<class 'tuple'>
>>> len(c)
1
>>>c
('',)
>>> len (c[0])  # same len of c[0] as with 'empty' tuple
0

Таким образом, внешние скобки включены для отображения кортежа, но на самом деле не являются частью кортежа и не нужны для создания кортежа.

Однако все эти методы скобок не являются пустыми на внешнем уровне, что также имеет прецеденты.

>>> a = ((),)  # extra brackets just to show same as other answers
>>> len(a)
1
>>> if a:
   print("not empty")
not empty
>>> e = tuple()
>>> len(e)
0
>>> type(e)
<class 'tuple'>
>>> if e:
   print("not empty")

>>> # note...did not print...so e acts as false as an empty tuple should

Поэтому, если вам действительно нужен подлинный пустой кортеж, используйте tuple(), но если все, что вам нужно, достаточно близко, вы можете использовать (), или ((),)