存储元组的集合的行为,Python

时间:2017-10-03 21:22:04

标签: python set tuples

我想创建一组元组,但遇到了一些我不理解的行为。例如:

    >>> 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。

2 个答案:

答案 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)}
    

这两个问题都没有与元组可以清除有关。