实验上,我能够创建一个像这样的东西:
s = set(((1,2),))
>>> s
{(1, 2)}
>>> (1, 2) in s
True
,但是语法看起来有点过载。有人可以解释一下为什么必须这样工作(三组括号和一个逗号)吗?
答案 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
中查找所有项目。如果您希望找到比设置变量更具可读性的解决方案。