Para el incorporado en set
tipo, add()
siempre da vuelta None
, pero no hay nada que le impida el uso de una subclase "inteligente":
class sset(set):
"""return True if on add if an object was really added (and not in yet)"""
def add(self, val):
if val in self:
return True
set.add(self, val)
return False
Esto le permite escribir:
s = sset()
if s.add('1'):
print('try 1')
if s.add('1'):
print('try 2')
y obtenga try 2
impreso cuando se ejecuta.
Esto evita que repiten varias líneas de código como @ de Brandizzi que pueden contener fácilmente ineficiencias:.
z = set()
was_here = y not in z
z.add(y)
if was_here: # If the object was not in the list yet...
print something
que es ineficiente y se añade incluso si ya está en Debería ser algo como:
z = set()
was_here = y not in z
if not was_here:
z.add(y)
else: # If the object was not in the list yet...
print something
con sset()
esto se puede reducir a:
z = sset()
if z.add(y): # If the object was not in the list yet...
print something
puedes hacer 'type (z.add (y))' en la consola para ver estas cosas por ti mismo. El resultado aquí es '' –
Oliver