Aller au contenu

Ordre naturel pour les chaines de caractères

Le cadre

La comparaison des chaines de caractères se fait souvent avec l'ordre lexicographique. Ainsi

  • "bonjour" < "salut", en effet "b" < "s".
  • "1345-test" < "138-test", en effet "1" == "1", puis "3" == "3", puis "4" < "8".

Mais certains logiciels utilisent parfois l'ordre naturel pour comparer des chaines de caractères.

Dans l'ordre naturel 1, on considère les chiffres consécutifs comme un seul nombre, puis on fait la comparaison lexicographique.

  • "1345-test" devient [1345, "-test"]
  • "138-test" devient [138, "-test"]

Et on a [1345, "-test"] > [138, "-test"] ce qui est naturel !

Exemples de transformation

On souhaite transformer

  • "A115-13" en ["A", 115, "-", 13]
  • "1345-test" en [1345, "-test"]
  • "Dossier-0" en ["Dossier-", 0]
  • Etc
Transformation réciproque : recolle

Réciproquement, on peut facilement recoller ["A", 115, "-", 13] en "A115-13".

🐍 Script Python
def recolle(morceaux):
    chaine = ""
    for bout in morceaux:
        chaine += str(bout)
    return chaine
🐍 Script Python
def recolle(morceaux):
    return "".join(map(str, morceaux))
🐍 Console Python
>>> recolle(["A", 115, "-", 13])
'A115-13'

Exercice

Coder une fonction naturel qui prend en paramètre une chaine de caractères entrée et qui renvoie une liste composée d'entiers et/ou de chaines de caractères sans chiffres issue de la décomposition de l'entrée.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : /
.128013x/.Tr;nbOylaeêu)d63Am(P+02è-U],59fq!7B8 _o=pcwgv4F1`kRéhtsSàLC[ji:E050r0n0)0m0;0l0*0O0T0l0m0*0*0R010)0;0S010406050*0p0v0v0m0f0k040+0Q0l0p170Q0h050c1e1g1i1k1c0S04051A1t1D0c1A1c0r0;0W0 1113150(0;0V0(0l1R0(0)1a050`0i0l0n1M1214011Q1S1U1S0)1!1$1Y0)0f1B0)0(1(1O010I0|0n0h0m0v0n010 1n0*0S0m0h150A1Y292b1|1*1 1$22241a0a0O0x0f0Q0S0Q0*0;1q0h0O0^270f0f0n0T2y1t2g0h1B0c1`2L1@1_1^1Z0r2i151U0h212v1Y1J1L101)2V0;2X0h0Q2#1Y0S2E1B2J2L2?1d2a2z2%1}2,0f1h0l1a0O0Z2I2`1b2_2h2|1*2~30320A352b372J2U013c0m31040O0t3g2K1c3j3a153m3o0O0X3s3i2`3k3y320G3C3u3E3w3l0Q2 3n320s3J382{1N3b3O3d3p0L3T3v3W3x3Y3Q3p0N3$3L3(3N3P3z0H3.393:3G040Z0z3^3V2(3;3Z0Z341u363K3_413{0Z3f463h48402}3*3o0Z3r4e3t3U3F4j1a0Z3B4n3D494i3=4s3I4v4g4q4z3|3S4C4p3M4b3#4I3%4a4r3|3-4N3/4P4F0Z3@4T4x3X4F0A3~4Z4h4#3Z0A452?4D4K4Q0A4d4/4J3`4=4m4^4O4y4,4u4}4U4 3+0A4B524!3)4$4H584*5a4,4M5d4E4,4S5i4;4$4Y5m4`4F0t4(5q4V3Z0t4.474_5w3+0t4@5A4~4+5D4|361E2;1t2#2O0r1_2T3M0T2-251B5P1C5N2^4v055V0^2=531*0#1a0^0I3C5B1}0U325=5H3x0I1a220)0p2E0l5`5,1519040w64593l1a211@0%0n6a5e01670q0=3 3k5^3p0O6s6i3k0*0r1a016z6o3M6w326s2q2E0h2T210O2a0f230B1@1%0!6e0f6g0!0F0O0p2X0 0(0{6!2B0T1i0m2G0B2E0*0F6B3:6D6r6s0$210W0Q0;1%6Z1%0r0%5V0v2u2w2y0O6K700O1U0*0)1%74766g6=416@6F7n2A006e6~0f0~762x0;0I0*7k1}7m7o6s0_2A7g6$2*0n0~6)6+6-6/0O0*2b0~0T1Q0I0I6/7A1*7C6s6z013J7n5?3b1a0v3O0T0n0m0p0b3C0O7+150Q1a0R7^7`6k1a0/0E7)6F800h1a0i0Q1p7 5{017|047~4v7_8e0*2e046A4C7*8e88047.0^0P7f0b7f8d658f7}8B6b0#0T1a0e0f0p6h8q868e5.040I3O8F6j8t0T8V3k0Q6q2*8Z4K6d0h6f8N2^8e676n8O7D808R7x8(6?0Z1a000z008`418g020l0)0g8i2?8k8C8X911}9395979d7!8|04000H905%8/1a8;4/7D8?8Q1a8_8j877-5W8x0n8z8-5L9q049s479u9M9a6b0T9k030O0j2z2a131%6K8v1%2,0v0i2E859N7o8@9x5;9z8s898b0)9i7{1a0K98369O6j8m6y7(9p8C8:9*9+9u9A8u7/7;7?6u3M8g0dae3`1a0m0S0S210rai416769a36b8t8a8cau6j6la6a79~3F9=ay99808g9|3haE6C8n8p9taD8P9b9B8w8y8A9:8CaK9^018H1a0Y3n0*9G4f9M9-040n0}a-2K80a58=9Na:9yaI8e8#5~0Q9@aZavaV0n9D9Faq1}a`aRaSaN3:9Q1a9S9U6L1)9Y2z9!0OaXa@1bbf6t9;aa0f7:7=7@az8!1aahbD8)04alan6Ibb1*asbN3x0i9x8+bQ8168bVaw9?bV6l0qaCa7a9axb4a a!8Eb59 aPa2beaSa99!b9aYb-6ba#b:3ka(048K8Mb(bwaU04b+a$b b}8WaGb,9}aJ1a0ya$9c4C068r8C8^9/cdaFaaaW9Eb|9Ha49rc6bg41crclcfcb9`aL2KcD7Bb=b#cBa{a/bx7.bzacbC8.b.04bGcYb6bJamaocPbXbHajc9b!c-ar1ab%a{a:a=a,c+9Ka.a8cTabbBbVagbYakc)bMc;bc1aatc$8WbS042*cg3ha_dbd5c/aHcz6bb$3JcoaT8G1a2E600f1sc0bIcUbAad4I0c5)0n2L2:dJ5O1K5Q2O2R2M0m1#dM0c5P1cdW0_0{0}372#3k0m0r7.0h7w1r0O0J0pb35X1zd)d+1rd.0h0C170)1=1B0m0O0(2E0I1P1:0S0*0=0cdW0Q0T0*0d0S0k1`1r0d3O0V0c7X0c0t0c0(8#0)0Q1u3O170h0V0d1W0v0l030#0n0k0C0I6Z2G0;1r0*1a0?8z6N2x7G7ce30ref1f6e0m780xekevdA0mdK371DdI3k1,1T1V1X5+avdf7ddia^b0bFdm0*eAc+0wc@5$dI3p7F5(5We@1V1.1W2f9bdff50f7fapd9bOdbf95LdH5W3p1r0)6Y9V6+0v6P2E7_fbeJ0k1tfb0O0m1 2z2B29737x7sfB1%8T0hePd/0w8bfN1pfGbKa=dT1$0qd:0p0;6L0n1p0O0o6QfNc)0l6g7Q616#0md;1%0%f~248+eY117c0;7e1%0m0W2bfA0r7q7W2F600n0f7G7T0Q756+gdeRbG1H1C040-e3gh1$g10r0pbm6NfEf{fe5*fJfLfx2A6}fAf`fG7bfYf!2zf$gI7=f{f+11dUf/d;f=dL6IfB7Qf@0lfN0f0Ve%g97F6H6|6~fW1M0%0O0,6Y177dgph4gr0OfP7L1%1@0;0d0O0.0_7fbr2F0(d-g4797e0O6N0S0;7MgqgbgY7810h37KfAg)f 9E6,7fg8fA7ba,0p1$hc6}7u8bgq7Ug38M790h2E0Vgd6QhMh!h!8,gye;040D2z0p7R0VfX6Ug4g|ht2B0I0{gW2zhgg0gq0^0~0Q0i0:0_gs751$0b7Kh+1p0|gdgi7cig2*1J7:i7gI1$0~e)hg0i1phei7i9ibh+0`g9hrhDhi0x1i79ifid1%8;gzd(3Me^fie{802k21235X2p0+0T0f18fAe+eldA2^dLe|a^5%fba:3abV6q7_fr3x8I1l600^bUi|bWc}3tcpdv045:i_5_j30I0v1a0P0P2*2xjhf7bV0i67a,0lcsdpaA1a6;dBc.2mbtdk04jwctbI0V6N0^c+jDchbx0mh^c+6mcC80jo1ajqjsdjf2c!dmjzcI8hcG04j#cRdu6jjT04jVd3f3j38tjGd*btcM1*ccjLc8j^jIj+c76bj.j:j3d4j?akjOjx92b/jEc.jNbtdtk36j8Rjaj3i`bVjejg0P2E2:jlj3bPj3k5a=jWf1cA04jQk2j{158Rdx61i-j~e}dw0n2:f7dcjt3kkAjrj;jZk9j)iZjJa$kXkCi:bEk!ddcuk0jA9IjKaMjSjpkBkZc#kVbIkhjPfu4f4:c.7e0pj10)0Pi8ia2G7zkc9ekekOju040/a6a90+j06ejmj30*9k000:0Qhp9ok/3M67k@cL80lt8}0ulzk~3:lCa$0v0;4AjPlDbuj,culol7lqkxdllslu0:2b0nlJjXkElSkI01lG9l0Ml*kDdqjvlNlP3|5Fl+l^kFlSkjl.8tlWl8lrlA8{8}0rggl)k(lf9j8}l=mekf41lO4s5ulKc=m07Z661a84dGi?1G5NdWdO1I1Kfg1-e`fk6biXjz2ohjeR1n1%i+e-5=i/3U2@5Li?8e0V67020V96m#m%m$0gi{m84afmeA0nfqm-dac,m?7,j/lp8+laiBldmjlicugPk7lhl~kl1a119%mbj(l6m6lZ9Jndm|f0k,afj=m_3xkak=kEl2cLkk3kbi049SfnfA0i0kfNkb5v1}0V8g0/0w00mb0Wl)6X00l=6X3}0q6XnLl%2X00nQnS330AnV0OnXlx0hn!0O00lInT0G0qmv4^fw5*5MdVdXdN0Wh/gChSfZ78gNdJ5 61a=gQ5*f?f^gV1%9W0*f 7424g^g`h*o604n4fMh5o6mEe_1/mHden9h(k|f4f6ngf85=n`dJ0Of%ouiSfhmGnl3`m/fom;f7nt2LfM067:f:g.gp24gjhfi(h97be 717H6%ighyhK6.igmc0T8k1@1r0V040l003O0rfGo8622Io}eCk!1A.

  1. Natural sort order : Page en anglais sur le tri par ordre naturel.