web-dev-qa-db-fra.com

Comment s'unir correctement avec l'ensemble

Je comprends que tout python set union avec un ensemble vide se traduirait par lui-même. Mais un comportement étrange que je détecte lorsque union est à l'intérieur d'une boucle for.

cela semble bon

num= set([2,3,4])
emp= set()
print num|emp
>>>set([2, 3, 4])

confus

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([])

n'importe qui pourrait me dire pourquoi le dernier ensemble est vide? la sortie est-elle censée être chaque élément unique de l'ensemble?

23
lcs

s.union(r) est un nouveau ensemble avec des éléments à la fois s et r.référence Vous devez changer

s.union(r)

à

s = s.union(r)

ou utiliser set.update .

31
Yu Hao