Python: unicité pour la liste des listes
je suis curieuse de savoir ce que serait un effient façon de uniquefying ces objets de données:
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']
]
pour chaque paire de données, la chaîne numérique gauche PLUS le type à droite indique l'unicité d'un élément de données. Et il renvoie une liste de listes comme les données de test, mais seules les uniques existent.
Cordialement
3 réponses
Vous pouvez utiliser un jeu:
unique_data = [list(x) for x in set(tuple(x) for x in testdata)]
Vous pouvez aussi voir cette page qui repère une variété de méthodes qui préservent ou ne préservent pas l'ordre.
j'ai essayé la réponse de @Mark et j'ai eu une erreur. La conversion de la liste et de chaque élément en un tuple a fonctionné. Vous ne savez pas si ce la meilleure façon.
list(map(list, set(map(lambda i: tuple(i), testdata))))
bien sûr, la même chose peut être exprimée en utilisant une liste de compréhension à la place.
[list(i) for i in set(tuple(i) for i in testdata)]
j'utilise Python 2.6.2.
mise à Jour
@Mark a depuis changé sa réponse. Sa réponse actuelle utilise des tuples et fonctionnera. Il en sera de mine :)
mise à jour 2
Merci à @Mark. J'ai changé ma réponse à retourner une liste de listes, plutôt qu'une liste de tuples.
import sets
testdata =[ ['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['10307528', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'], ['15481740', 'ETH'], ['15379365', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15379365', 'ETH']]
conacatData = [x[0] + x[1] for x in testdata]
print conacatData
uniqueSet = sets.Set(conacatData)
uniqueList = [ [t[0:-3], t[-3:]] for t in uniqueSet]
print uniqueList