Python3中的一组一个元组

时间:2019-10-16 18:17:23

标签: python python-3.x set tuples

实验上,我能够创建一个像这样的东西:

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

,但是语法看起来有点过载。有人可以解释一下为什么必须这样工作(三组括号和一个逗号)吗?

3 个答案:

答案 0 :(得分:1)

您本可以使用set([(1, 2)])实现相同的目的。

对于函数调用,您有一组(没有双关语……)括号。 set()接受一个可迭代的参数,即包含唯一元组的列表。

如果要使用元组而不是列表,则它会更难阅读。列表[item]的元组等效项是元组(item,)-逗号使它成为一个元组,而不是括号。

因此,将我的[ (1, 2) ]替换为( (1, 2), ),您将得到set(((1, 2),))

当然,正如评论中指出的那样,{(1, 2)}是写它的最简单方法...

答案 1 :(得分:0)

结尾的,只是告诉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函数调用。

答案 2 :(得分:0)

要清楚,您想验证元组(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中查找所有项目。如果您希望找到比设置变量更具可读性的解决方案。