如何与集合正确结合

lcs*_*lcs 23 python union for-loop set python-2.7

我知道任何设置union为空集的python 都会导致它自己.但是我在unionfor循环内部检测到一些奇怪的行为.

看起来不错

num= set([2,3,4])
emp= set()
print num|emp
>>>set([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

困惑

s = set()
inp = ["dr101-mr99","mr99-out00","dr101-out00","scout1-scout2","scout3-    scout1","scout1-scout4","scout4-sscout","sscout-super"]
for ele in inp:
  r = set(ele.split("-"))
  print r
  s.union(r)
print s
 >>>set(['mr99', 'dr101'])
    set(['out00', 'mr99'])
    set(['out00', 'dr101'])
    set(['scout1', 'scout2'])
    set(['scout1', 'scout3'])
    set(['scout4', 'scout1'])
    set(['scout4', 'sscout'])
    set(['super', 'sscout'])
    set([])
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么最后一集是空的?输出应该是集合中的每个唯一元素吗?

Yu *_*Hao 31

s.union(r)是一个新的集合,包含来自s和的元素r.参考您需要更改

s.union(r)
Run Code Online (Sandbox Code Playgroud)

s = s.union(r)
Run Code Online (Sandbox Code Playgroud)

或者,使用set.update.

  • 或者使用[`set.update`](https://docs.python.org/2/library/stdtypes.html#set.update),而不是每次都创建一个新集 (3认同)