Как создать кортеж пустого кортежа в 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()
, но если все, что вам нужно, достаточно близко, вы можете использовать (),
или ((),)