Pergunta

Eu tenho uma lista de listas:

lists = [[1,4,3,2,4], [4,5]]

Quero achatar esta lista e remover todas as duplicatas; Ou, em outras palavras, aplique uma operação de união definida:

desired_result = [1, 2, 3, 4, 5]

Qual é a maneira mais fácil de fazer isso? (Sou forçado a usar o Python 2.4 para este projeto)

Foi útil?

Solução

set.union faz o que você quer:

>>> results_list = [[1,2,3], [1,2,4]]
>>> results_union = set().union(*results_list)
>>> print(results_union)
set([1, 2, 3, 4])

Você também pode fazer isso com mais de duas listas.

Outras dicas

Já que você parece estar usando o Python 2.5 (ele gostaria Seja bom mencionar em seu q se você precisar de um A para versões! = 2.6, a propósito atual, a propósito ;-) e deseja uma lista em vez de um conjunto como resultado, recomendo:

   import itertools

   ...

   return list(set(itertools.chain(*result_list)))

ITERTOOLS Geralmente é uma ótima maneira de trabalhar com iteradores (e, portanto, com muitos tipos de seqüências ou coleções) e eu recomendo que você se familiarize com ele. itertools.chain, em particular, está documentado aqui.

Os sindicatos não são suportados por listas, que são ordenadas, mas são suportadas por conjuntos. Verificação de saída set.Union.

Usei o seguinte para fazer interseções, o que evita a necessidade de conjuntos.

a, b= [[1,2,3], [1,2]]
s = filter( lambda x: x in b, a)

ou,

s = [ x for x in b if x in a ]

Você também pode seguir este estilo

In [12]: a = ['Orange and Banana', 'Orange Banana']
In [13]: b = ['Grapes', 'Orange Banana']
In [14]: c = ['Foobanana', 'Orange and Banana']

In [20]: list(set(a) | set(b) | set(c))
Out[20]: ['Orange and Banana', 'Foobanana', 'Orange Banana', 'Grapes']

In [21]: list(set(a) & set(b) | set(c))
Out[21]: ['Orange and Banana', 'Foobanana', 'Orange Banana']    
desired_result = [x for y in lists for x in y]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top