Comment trier une liste complexe ?
Résolu
Ptiso
Messages postés
1
Statut
Membre
-
heyquem Messages postés 808 Statut Membre -
heyquem Messages postés 808 Statut Membre -
Bonjour,
j'aimerais savoir comment trier une liste complexe du type:
['6#P-,[-.<.,<]#!]][[>><<..--,,++\n', '6#P<+[.,+.]<>#!++,,--..<<>>[[]]\n', '6#P+[<+.<.]<>#!++,,--..<<>>[[]]\n', '6#P><+<,[.+.]#!++,,--..<<>>[[]]\n', '6#P><+[[+..],#!++,,--..<<>>[[]]\n', '6#P<-[.<.-><]#!]][[>><<..--,,++\n', '6#P+[[+..],+,#!++,,--..<<>>[[]]\n', '6#P-[.-.]-,-#!][[>><<..--,,++\n', '6#P-<[.-.][]+#!]][[>><<..--,,++\n', '6#P-+,-.[.-.]#!]][[>><<..--,,++\n']
comme le premier argument de chaque element est de type str() un simple :
liste.sort()
renvois des truc etrange en cas de comparaison entre par exemple :
[66,6,7,111]
le sortie serait :
>>> [111,6,66,7]
alors que je souhaiterais:
>>> [6,7,66,111]
Cordialement.
j'aimerais savoir comment trier une liste complexe du type:
['6#P-,[-.<.,<]#!]][[>><<..--,,++\n', '6#P<+[.,+.]<>#!++,,--..<<>>[[]]\n', '6#P+[<+.<.]<>#!++,,--..<<>>[[]]\n', '6#P><+<,[.+.]#!++,,--..<<>>[[]]\n', '6#P><+[[+..],#!++,,--..<<>>[[]]\n', '6#P<-[.<.-><]#!]][[>><<..--,,++\n', '6#P+[[+..],+,#!++,,--..<<>>[[]]\n', '6#P-[.-.]-,-#!][[>><<..--,,++\n', '6#P-<[.-.][]+#!]][[>><<..--,,++\n', '6#P-+,-.[.-.]#!]][[>><<..--,,++\n']
comme le premier argument de chaque element est de type str() un simple :
liste.sort()
renvois des truc etrange en cas de comparaison entre par exemple :
[66,6,7,111]
le sortie serait :
>>> [111,6,66,7]
alors que je souhaiterais:
>>> [6,7,66,111]
Cordialement.
A voir également:
- Comment trier une liste complexe ?
- Liste déroulante excel - Guide
- Comment trier par ordre alphabétique sur excel - Guide
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Site dangereux liste - Guide
1 réponse
Remarquer qu'il y a des chiffres aussi à l'intérieur des chaînes
résultat
import re
li = ['666#P-,[-.<.,<]#!]][[>><<..--,,++\n',
'6#P<+[.,+.]<>#!]]',
'66#P+[<+.<.]<>#!++,,--..<<>>[[]]\n',
'111#P><+<,[.+.]#!++,,--..<<>>[[]]\n',
'7#P><+[[+..],#!++,,--..<<>>[[]]\n',
'6#P<+[.<.-><]73#!]]',
'6#P<-[.<.-><]73#!]]',
'6#P<-[.<.-><]70#!]]']
print 'li'
print '\n'.join(map(repr,li))
print '---------------------'
lu = li[:]
lu.sort()
print 'lu.sort()'
print '\n'.join(map(repr,lu))
print '---------------------'
def modi(x,r = re.compile('(\d+)')):
sp = r.split(x)
for i in xrange(len(sp)):
try: sp[i] = int(sp[i])
except: pass
return sp
lu = li[:]
print 'lu.sort(key = modi)'
lu.sort(key = modi)
print '\n'.join(map(repr,lu))
résultat
li '666#P-,[-.<.,<]#!]][[>><<..--,,++\n' '6#P<+[.,+.]<>#!]]' '66#P+[<+.<.]<>#!++,,--..<<>>[[]]\n' '111#P><+<,[.+.]#!++,,--..<<>>[[]]\n' '7#P><+[[+..],#!++,,--..<<>>[[]]\n' '6#P<+[.<.-><]73#!]]' '6#P<-[.<.-><]73#!]]' '6#P<-[.<.-><]70#!]]' --------------------- li.sort() '111#P><+<,[.+.]#!++,,--..<<>>[[]]\n' '6#P<+[.,+.]<>#!]]' '6#P<+[.<.-><]73#!]]' '6#P<-[.<.-><]70#!]]' '6#P<-[.<.-><]73#!]]' '66#P+[<+.<.]<>#!++,,--..<<>>[[]]\n' '666#P-,[-.<.,<]#!]][[>><<..--,,++\n' '7#P><+[[+..],#!++,,--..<<>>[[]]\n' --------------------- li.sort(key = modi) '6#P<+[.,+.]<>#!]]' '6#P<+[.<.-><]73#!]]' '6#P<-[.<.-><]70#!]]' '6#P<-[.<.-><]73#!]]' '7#P><+[[+..],#!++,,--..<<>>[[]]\n' '66#P+[<+.<.]<>#!++,,--..<<>>[[]]\n' '111#P><+<,[.+.]#!++,,--..<<>>[[]]\n' '666#P-,[-.<.,<]#!]][[>><<..--,,++\n'