A partir de cette structure de données: [(1,2),(1,3),(1,4),(1,5)]
Je cherche à obtenir les valeurs uniques, ou [1,2,3,4,5]
. Quelle est la solution facile ici?Valeurs uniques uniques de la liste des paires de tuple?
Répondre
Vous pouvez utiliser set
avec la compréhension de la liste:
lst = [(1,2),(1,3),(1,4),(1,5)]
set(j for i in lst for j in i)
# {1, 2, 3, 4, 5}
Ceci est le premier et le plus facile/pythonique pour résoudre la question. Très bonne réponse. –
Vous pouvez également utiliser une définition d'ensemble: '{j pour i dans lst pour j dans i}'. :) – MSeifert
Utilisez chain.from_iterable
à partir du module itertools
. Il est généralement considéré comme le moyen idiomatique d'aplatir un itérable 2D par opposition à une compréhension de liste imbriquée. Voir this question.
>>> from itertools import chain
>>> set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)]))
{1, 2, 3, 4, 5}
chain.from_iterable
aplanit la liste et set
maintient que des valeurs uniques.
Pour revenir à une liste, passez simplement au constructeur list
.
>>>list(set(chain.from_iterable([(1,2),(1,3),(1,4),(1,5)])))
[1, 2, 3, 4, 5]
Dans votre sortie attendue de l'ordre des éléments uniques suit l'ordre d'apparition. Une façon de le faire serait (en utilisant une bibliothèque externe, mais les recettes sont disponibles dans le itertools
-recipes section):
>>> from iteration_utilities import flatten, unique_everseen
>>> x = [(1,2),(1,3),(1,4),(1,5)]
>>> list(unique_everseen(flatten(x)))
[1, 2, 3, 4, 5]
utilise un ensemble intermédiaire ok? – Nic