Набор из одного кортежа в Python3 - PullRequest
0 голосов
/ 16 октября 2019

Экспериментально я смог создать такой:

s = set(((1,2),))
>>> s
{(1, 2)}
>>> (1, 2) in s
True

, но синтаксис выглядит немного перегруженным. Может кто-нибудь объяснить, почему так должно работать (три набора скобок и запятая)?

Ответы [ 3 ]

1 голос
/ 16 октября 2019

Вы могли бы использовать set([(1, 2)]) для достижения того же.

У вас есть один набор (нет, каламбур не предназначен ...) скобок для вызова функции. set() принимает в качестве аргумента итеративный список, содержащий ваш единственный кортеж.

Если вы хотите использовать кортеж вместо списка, его становится немного труднее читать. Эквивалентом кортежа списка [item] является кортеж (item,) - запятая делает его кортежем, а не скобками.

Итак, заменив мой [ (1, 2) ] на ( (1, 2), ), вы получите set(((1, 2),))

И, конечно, как отмечено в комментариях, {(1, 2)} будет самым простым способом написать это ...

0 голосов
/ 16 октября 2019

Для ясности, вы хотите проверить, что кортеж (1, 2) находится в s? Использование гибкости Python для удобства чтения может помочь вам понять, почему необходимо количество скобок.

set( # first paren is for calling the function set
    ( # second paren creates the object of items set should look at
        (1,2), # is an item in the set 
    )
    )

# output same as
set(((1,2), (1,2), (1,2)))

# output same as
t = ((1,2), (1,2), (1,2))
set(t)

# output same as
t = (1,2)
t = (t, t, t)
set(t)

# output same as
t = (1, 2)
set([t]*5)

set() ищет все элементы в self. Если вы надеетесь на более читабельное решение, чем набор переменных.

0 голосов
/ 16 октября 2019

Завершающий , просто сообщает Python, что значение является последовательностью, в данном случае tuple.

Круглые скобки обычно используются в математических выражениях. И они также используются для определения кортежей.

>>> (3 + 2)
5
>>> (10)
10

Если в паре скобок содержится только один элемент, он рассматривается как выражение и оценивается, возвращая одно значение.

Чтобы явно сказать Python, что это tuple, в конце необходимо добавить ,.

>>> (10,)
(10,)
>>> t = 1,
>>> t
(1,)
>>> type(t)
<class 'tuple'>

Возвращаясь к вашему вопросу,

s = set(((1,2),))

(1, 2) - это tuple.
((1, 2),) - это tuple кортежей (в данном случае только один кортеж).
Нечто подобное этому,

>>> ((1, 2), (3, 4))
((1, 2), (3, 4))

только спервый элемент.

Преобразование ((1,2),) в set вернет set с (1, 2) в качестве единственного элемента. Самая внешняя пара скобок - это просто вызов функции set.

...