|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 2 ![]() |
Bonjour à tous, j'ai cette liste :
a = [(1, 3), (3, 0), (3, 2), (0, 3), (4, 3), (3, 1), (2, 3), (3, 6), (6, 2), (6, 5), (2, 6), (3, 4), (4, 7), (7, 3), (7, 6), (6, 3), (3, 7), (8, 7), (7, 4), (5, 6), (6, 10), (10, 5), (5, 10), (6, 7), (7, 11), (11, 6), (10, 6), (6, 11), (7, 8), (12, 7), (11, 7), (7, 12)] len(a) = 32 Il y a des couples où (a,b) = (b,a) j'aimerai n'en garder qu'un. soit (a,b), soit (b,a). Donc j'aurai après len(a) = 16 Merci. |
|
|
00
|
|
|
#2 | ||
|
Expert Confirmé
![]() ![]() Inscription : décembre 2007 Messages : 1 770 ![]() |
Bonjour,
Solution possible: Code :
Code :
b = [(e1, e2) for i, (e1, e2) in enumerate(a) if ((e1, e2) not in a[:i]) and ((e2, e1) not in a[:i])]
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos... Mes recettes python: http://www.jpvweb.com |
||
|
|
20
|
|
|
#3 |
|
Membre chevronné
![]() Inscription : avril 2004 Messages : 670 ![]() |
le filtre devrait se faire au moment de la création de la liste avec un tri sur chaque tuple, puis un set() sur la liste.
sinon: Code :
list(set(map(lambda x:tuple(sorted(x)),a))) |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2012 Messages : 2 ![]() |
Merci beaucoup tyrtamos !
Ta solution est clair et belle. Merci. J'ai bien compris l'intérêt de la fonction enumerate. Merci pour la seconde ligne. Je suis débutant alors je la garde pour plus tard quand je serai à l'aise. @josmiley Je ne connais pas encore assez Python pour comprendre ta ligne. Tout de même merci à toi aussi. |
|
|
00
|
|
|
#5 | ||
|
Membre Expert
![]() Fred Enseignant Inscription : juillet 2006 Messages : 1 315 ![]() |
Je propose ma solution sans enumerate
Code :
__________________
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein) |
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Similaire à la solution de josmiley, mais avec un set comprehension (Python 2.7 ou 3.1+) et sans utiliser sorted:
Code :
list({(x,y) if x <= y else (y,x) for x,y in a}) |
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() Inscription : avril 2004 Messages : 670 ![]() |
sans blague ? ça existe un set comprehension ?
trop coooool
|
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Bastien MontagneDiverses et multiples Inscription : mai 2008 Messages : 620 ![]() |
Voui ça existe… Mais attention, un set, ça implique la perte de l’ordonnancement original (ce qui n’a peut-être aucune importance ici, mais mieux vaut le préciser
__________________
Incantation : Méchant forum, arrête de transformer toutes mes espaces insécables en astérisques |
|
|
00
|
|
|
#10 | ||
|
Membre Expert
![]() Inscription : mars 2007 Messages : 851 ![]() |
Et juste pour le fun, une version avec une sous-classe de tuple qui redéfinit __eq__ et __hash__ de façon à retourner la même valeur quel que soit l'ordre des éléments:
Code :
|
||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com