1.
def
remove_duplos_1(seq):
2.
"""Retira elementos duplicados da sequência."""
3.
aux
=
[]
4.
for
i,elem
in
enumerate(seq):
5.
if
elem
not
in
seq[i
+
1
:]:
6.
aux.append(elem)
7.
return
aux
ou ainda:
1.
def
remove_duplos_2(seq):
2.
"""Retira duplicados da sequência."""
3.
return
[elem
for
i,elem
in
enumerate(seq)
if
elem
not
in
seq[i
+
1
:]]
Nestes dois casos a ideia é óbvia: pegar num elemento e ver se há mais à sua frente.
Tal como estão, estas soluções funcionam bem para listas. E se for outro tipo de sequências? Cadeias de caracteres, por exemplo:
1.
def
remove_duplos_3(seq):
2.
"""Retira elementos duplicados da sequência."""
3.
aux
=
''
4.
for
i,elem
in
enumerate(seq):
5.
if
elem
not
in
seq[i
+
1
:]:
6.
aux
=
aux
+
elem
7.
return
aux
Mas se eu souber que existe um tipo de dados set, que implementa conjuntos em Python posso fazer melhor. Por exemplo, no caso das listas:
1.
def
remove_duplos_4(seq):
2.
return
list(set(seq))
Os conjuntos são colecções não ordenadas, mutáveis e heterogéneas de (referências para) objectos. Existem vários métodos associados com os objectos do tipo set, por exemplo union, intesection e difference. Para saber mais é só consultar o manual de Python.
Claro que agora é fácil encontrar uma solução que dê para diferentes tipos de objectos:
01.
def
remove_duplos_5(seq):
02.
aux
=
set(seq)
03.
if
isinstance(seq,str):
04.
return
''.join(aux)
05.
elif
isinstance(seq,list):
06.
return
list(aux)
07.
elif
isinstance(seq,tuple):
08.
return
tuple(aux)
09.
else
:
10.
print
'TypeError'
11.
return
seq
E pronto. Acabaram-se os duplos!
Sem comentários:
Enviar um comentário