我正在尝试使用set.add(tuple)
迭代地构建一组元组。问题是第一个元组不会被封装为元组。其成员作为独特元素进入集合。
# What I'd like to do
s = set((1,2))
s.add((3,4))
s.add((5,6))
>>>s
>>>{1, 2, (3, 4), (5, 6)}
当然,我可以将整个事物构建为元组列表,然后将其转换为集合,但我想知道是否可以避免从列表转换为设置。
# Works with some extra work
l = [(1,2)]
l.append((3,4))
l.append((5,6))
s = set(l)
>>>s
>>>> {(1, 2), (3, 4), (5, 6)}
感谢。
答案 0 :(得分:3)
你应该像这样创建你的集合:
s = {(1, 2)}
如果不这样做,set()
“构造函数”会解压缩元组中的所有元素并将它们添加到新的空集中。
答案 1 :(得分:2)
在Python 2.7及更高版本中,您可以使用set literal:
s = {(1, 2)}
如果您想使用set
创建一个元素为thing
的集合,则执行
s = set([thing])
其中set
的参数是1元素列表。如果thing
是(1,2)`,那意味着你做
s = set([(1, 2)])
答案 2 :(得分:1)
单参数set
构造函数将可迭代的东西放入集合中。特别是,它不接受对象并创建包含该对象的单例集。
您没有收到错误,因为元组是可迭代的; set
构造函数尽职地将元组的每个元素添加到集合中。
最好使用构造函数{(1,2)}
而不是set(((1,2),))
或set([(1,2)])
;重载{...}
语法以允许创建set
个实例以及dict
instancess。 (但你不能用这种方式设置空集;面对歧义,python假设dict
)