Python的集合并集引发TypeError

时间:2018-08-16 07:31:44

标签: python set generator-expression set-union

考虑一组序列:

>>> [{n, 2*n} for n in range(5)]
[{0}, {1, 2}, {2, 4}, {3, 6}, {8, 4}]

将它们直接传递给union方法会产生正确的结果:

>>> set().union({0}, {1, 2}, {2, 4}, {3, 6}, {8, 4})
{0, 1, 2, 3, 4, 6, 8}

但是将它们作为列表或生成器表达式传递会导致TypeError:

>>> set().union( [{n, 2*n} for n in range(5)] )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

>>> set().union({n, 2*n} for n in range(5))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'set'

为什么会发生,有什么解决方案?

2 个答案:

答案 0 :(得分:4)

此错误的原因是set.union()期望一个或多个集合(即set.union(oneset, anotherset, andathirdone)),而不是list或生成器。

解决方案是解压缩列表或生成器:

>>> set().union( *({n, 2*n} for n in range(5)) )
{0, 1, 2, 3, 4, 6, 8}

答案 1 :(得分:1)

这是在不创建列表的情况下合并多个集合的方法

s = set()

for n in range(5): 
    s = s.union({n, 2*n})