Py学习  »  Python

python3中一个元组的集合

Roman • 5 年前 • 1462 次点击  

实验上,我能创造出这样一个:

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

但是语法看起来有点超载。有人能解释一下为什么一定要这样做吗(三组括号和一个逗号)?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/47173
 
1462 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Elizabeth
Reply   •   1 楼
Elizabeth    5 年前

为了清楚起见,您需要验证元组 (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 是的。如果您希望得到比设置变量更可读的解决方案。

Diptangsu Goswami
Reply   •   2 楼
Diptangsu Goswami    5 年前

尾随者 , 简单地告诉python值是一个序列,一个 tuple 在这种情况下。

圆括号通常用在数学表达式中。它们也被用来定义元组。

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

如果一对圆括号中只有一个元素,则将其视为表达式并进行计算,返回单个值。

为了明确地告诉python 元组 ,一个 我是说, 必须在末尾添加。

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

说到你的问题,

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

(1, 2) 是一个 元组 是的。
((1, 2),) 是一个 元组 元组的(在本例中只有一个元组)。
类似的东西,

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

只有第一个元素。

转换 ((1,2),) 给一个 set 将返回 设置 具有 (一、二) 作为唯一的元素。

Thierry Lathuille
Reply   •   3 楼
Thierry Lathuille    5 年前

你本可以用的 set([(1, 2)]) 为了达到同样的目的。

函数调用有一组括号(不,不是双关语…)。 set() 接受一个iterable作为参数,这个列表只包含您的元组。

如果你想使用元组而不是列表,它会变得更难阅读。与列表等价的元组 [item] 是元组吗 (item,) -逗号使它成为元组,而不是括号。

所以,替换我的 [ (1, 2) ] 具有 ( (1, 2), ) ,你得到你的 set(((1, 2),))

当然,正如评论中指出的, {(1, 2)} 这是最简单的写法…