如何使用元组扩展集合?

Spa*_*ine 5 python set

不像list.extend(L),没有extend功能set.如何以pythonic方式将元组扩展为集合?

t1 = (1, 2, 3)
t2 = (3, 4, 5)
t3 = (5, 6, 7)

s = set()
s.add(t1)
s.add(t2)
s.add(t3)

print s
set([(3, 4, 5), (5, 6, 7), (1, 2, 3)])
Run Code Online (Sandbox Code Playgroud)

我的预期结果是:

set([1, 2, 3, 4, 5, 6, 7])
Run Code Online (Sandbox Code Playgroud)

我的解决方案是这样的:

for item in t1 :
    s.add(item)
Run Code Online (Sandbox Code Playgroud)

Ana*_*mar 13

试试union方法 -

t1 = (1, 2, 3)
t2 = (3, 4, 5)
t3 = (5, 6, 7)
s= set()
s = s.union(t1)
s = s.union(t2)
s = s.union(t3)
s
>>> set([1, 2, 3, 4, 5, 6, 7])
Run Code Online (Sandbox Code Playgroud)

或者如评论中所示,清洁方法 -

s = set().union(t1, t2, t3)
Run Code Online (Sandbox Code Playgroud)

  • @goncalopp*"注意,union(),intersection(),difference()和symmetric_difference(),issubset()和issuperset()方法的非运算符版本将接受任何iterable作为参数."* - https ://docs.python.org/3/library/stdtypes.html#set-types-set-frozenset(以及2.x版本) (6认同)
  • @jonrsharpe:`set().union(t1,t2,t3)`甚至更清晰,恕我直言,因为参数之间的对称性. (4认同)
  • @SparkandShine`update`就地(因此仅适用于`set`,而不是`frozenset`),而`union`返回一个新的`set` (2认同)

vog*_*tix 8

或者:

>>> newSet = s.union(t1, t2, t3)
set([1, 2, 3, 4, 5, 6, 7])
Run Code Online (Sandbox Code Playgroud)

或者以下,实际更新,无需任何分配

>>> s.update( t1, t2, t3)
>>> s
set([1, 2, 3, 4, 5, 6, 7])
Run Code Online (Sandbox Code Playgroud)


Kru*_*lur 7

你使用的是错误的方法.add添加单个项目,update使用参数对集合进行联合.

t1 = (1, 2, 3)
t2 = (3, 4, 5)
t3 = (5, 6, 7)

s = set()
s.update(t1)
s.update(t2)
s.update(t3)

print s
Run Code Online (Sandbox Code Playgroud)