I should note that this doesn&#39;t solve the general case of mixed numeric/alphabetic sorting:<br><br>&gt;&gt;&gt; a = [&#39;a_1&#39;, &#39;a_2&#39;, &#39;a_3&#39;, &#39;a_4&#39;, &#39;a_10&#39;, &#39;b_1&#39;, &#39;b_2&#39;, &#39;b_3&#39;, &#39;b_4&#39;, &#39;b_10&#39;]<br>

&gt;&gt;&gt; a.sort(key=lambda x: int(x.split(&#39;_&#39;)[-1]))<br>&gt;&gt;&gt; a<br>[&#39;a_1&#39;, &#39;b_1&#39;, &#39;a_2&#39;, &#39;b_2&#39;, &#39;a_3&#39;, &#39;b_3&#39;, &#39;a_4&#39;, &#39;b_4&#39;, &#39;a_10&#39;, &#39;b_10&#39;]<br>

<br>It only works if the alphabetic part of the string is the same everywhere, and it doesn&#39;t work with a collection where some numbers appear before, some after, etc.<br><br>Here is my solution for the general case:<br>

<br>from itertools import groupby<br>def alphanum_key(string):<br>    t = []<br>    for isdigit, group in groupby(string, str.isdigit):<br>        group = &#39;&#39;.join(group)<br>        t.append(int(group) if isdigit else group)<br>

    return t<br><br>or, in a oneliner:<br><br>&gt;&gt;&gt; alphanum_key = lambda x: tuple((int(&#39;&#39;.join(g)) if k else &#39;&#39;.join(g)) for k, g in groupby(x, str.isdigit))<br><br>that&#39;s equivalent, but not very readable. It works by grouping sequences of numbers and not numbers together, and treating the number sequences as integers rather than strings.<br>

<br>&gt;&gt;&gt; a = [&#39;0a&#39;, &#39;1a&#39;, &#39;10a&#39;, &#39;a1&#39;, &#39;a2&#39;, &#39;a10&#39;, &#39;a11&#39;, &#39;b2&#39;, &#39;b3&#39;, &#39;b20&#39;]<br>&gt;&gt;&gt; a.sort()<br>&gt;&gt;&gt; a<br>[&#39;0a&#39;, &#39;10a&#39;, &#39;1a&#39;, &#39;a1&#39;, &#39;a10&#39;, &#39;a11&#39;, &#39;a2&#39;, &#39;b2&#39;, &#39;b20&#39;, &#39;b3&#39;]<br>

&gt;&gt;&gt; # regular sort messes up because &#39;a10&#39; is alphabetically before &#39;a2&#39;. now with alphanumeric sort:<br>&gt;&gt;&gt; a.sort(key=alphanum_key)<br>&gt;&gt;&gt; a<br>[&#39;0a&#39;, &#39;1a&#39;, &#39;10a&#39;, &#39;a1&#39;, &#39;a2&#39;, &#39;a10&#39;, &#39;a11&#39;, &#39;b2&#39;, &#39;b3&#39;, &#39;b20&#39;]<br>

<br>Hugo<br><br><div class="gmail_quote">On Wed, Jan 13, 2010 at 2:32 PM, Albert-Jan Roskam <span dir="ltr">&lt;<a href="mailto:fomcl@yahoo.com">fomcl@yahoo.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">

Very concise == neat solutions. Yummy. ;-) Thanks for your replies!<div class="im"><br><br>Cheers!!<br>Albert-Jan<br><br>~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br>In the face of ambiguity, refuse the temptation to guess.<br>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br><br></div>--- On <b>Wed, 1/13/10, Sander Sweers <i>&lt;<a href="mailto:sander.sweers@gmail.com" target="_blank">sander.sweers@gmail.com</a>&gt;</i></b> wrote:<br>


<blockquote style="border-left: 2px solid rgb(16, 16, 255); padding-left: 5px; margin-left: 5px;"><br>From: Sander Sweers &lt;<a href="mailto:sander.sweers@gmail.com" target="_blank">sander.sweers@gmail.com</a>&gt;<div class="im">

<br>Subject: Re: [Tutor] samples on sort method of sequence object.<br></div>To: &quot;Albert-Jan Roskam&quot; &lt;<a href="mailto:fomcl@yahoo.com" target="_blank">fomcl@yahoo.com</a>&gt;<br>Cc: &quot;*tutor python&quot; &lt;<a href="mailto:tutor@python.org" target="_blank">tutor@python.org</a>&gt;<br>

Date: Wednesday, January 13, 2010, 2:14 PM<div class="im"><br><br>
<div>2010/1/13 Albert-Jan Roskam &lt;<a href="http://us.mc1107.mail.yahoo.com/mc/compose?to=fomcl@yahoo.com" target="_blank">fomcl@yahoo.com</a>&gt;<br>&gt;<br>&gt; Interesting. Can this also be used to make sorting of alphanumerical list items in a &#39;numerical&#39; way easier?<br>

&gt; &gt;&gt;&gt; x<br>&gt; [&#39;var_0&#39;, &#39;var_13&#39;, &#39;var_11&#39;, &#39;var_9&#39;, &#39;var_4&#39;, &#39;var_1&#39;, &#39;var_5&#39;, &#39;var_6&#39;, &#39;var_7&#39;, &#39;var_14&#39;, &#39;var_2&#39;, &#39;var_3&#39;, &#39;var_8&#39;, &#39;var_10&#39;, &#39;var_12&#39;]<br>

<br>Yes.<br>&gt;&gt;&gt; x<br>[&#39;var_0&#39;, &#39;var_13&#39;, &#39;var_11&#39;, &#39;var_9&#39;, &#39;var_4&#39;, &#39;var_1&#39;, &#39;var_5&#39;,<br>&#39;var_6&#39;, &#39;var_7&#39;, &#39;var_14&#39;, &#39;var_2&#39;, &#39;var_3&#39;, &#39;var_8&#39;, &#39;var_10&#39;,<br>

&#39;var_12&#39;]<br>&gt;&gt;&gt; sorted(x, key=lamda x: int(x.strip(&#39;var_&#39;)))<br>SyntaxError: invalid syntax<br>&gt;&gt;&gt; sorted(x, key=lambda x: int(x.strip(&#39;var_&#39;)))<br>[&#39;var_0&#39;, &#39;var_1&#39;, &#39;var_2&#39;, &#39;var_3&#39;, &#39;var_4&#39;, &#39;var_5&#39;, &#39;var_6&#39;,<br>

&#39;var_7&#39;, &#39;var_8&#39;, &#39;var_9&#39;, &#39;var_10&#39;, &#39;var_11&#39;, &#39;var_12&#39;,
 &#39;var_13&#39;,<br>&#39;var_14&#39;]<br><br>Greets<br>Sander<br></div></div></blockquote></td></tr></tbody></table><br>

      <br>_______________________________________________<br>
Tutor maillist  -  <a href="mailto:Tutor@python.org">Tutor@python.org</a><br>
To unsubscribe or change subscription options:<br>
<a href="http://mail.python.org/mailman/listinfo/tutor" target="_blank">http://mail.python.org/mailman/listinfo/tutor</a><br>
<br></blockquote></div><br>