我想创建一组元组,但遇到了一些我不理解的行为。例如:
>>> b=set()
>>> b.add((1,2))
>>> b.add((4,5))
>>> b
{(1, 2), (4, 5)}
# all fine
>>> f = set((1,2,3))
>>> f
{1, 2, 3}
# ?
>>> b=set().add((1,2))
>>> b
# b is empty?
有人可以帮我理解这种行为吗?我的理解是元组是可以清洗的,所以我应该能够将它们存储在一组中。我使用的是Python 3。
答案 0 :(得分:3)
set((1, 2, 3))
表示一组(1, 2, 3)
元素。唯一元素为(1, 2, 3)
的集合为{(1, 2, 3)}
,而非set((1, 2, 3))
。
set.add
修改了一个集合。如果您要添加到集合,则需要存储集合本身,然后add
存储集合,而不是存储add
的返回值。
答案 1 :(得分:3)
你混淆了不同的事情。
set()
采用可迭代的方式,并根据内容创建一个集合。
如果要创建具有单个元组的集合,请使用该单元组传递一个iterable:
>>> set([(1, 2, 3)])
{(1, 2, 3)}
最好使用{...}
集合文字语法:
>>> {(1, 2, 3)}
{(1, 2, 3)}
set().add()
就地更新一套,然后返回None
。
如果您想创建一个空集并添加到该集,请在两个单独的表达式中执行此操作:
>>> b = set()
>>> b.add((1, 2))
>>> b
{(1, 2)}
这两个问题都没有与元组可以清除有关。