How to Sort this array
Sean 'Shaleh' Perry
shalehperry at attbi.com
Sat Oct 26 10:28:25 CEST 2002
On Friday 25 October 2002 23:23, Hai Wu wrote:
> How to sort an array with numbers like 021025_11441 in it? It needs to be
> sorted first by the number before '_', then sorted by the number after '_'?
> How to do it using a customized sort function?
>
the usual tactic is to write a comparison function and pass this to .sort().
parts = ['021025_11441', '876432_19532', '243756_98652', '565438_67453']
def part_sort(a, b):
return cmp(a,b)
parts.sort(part_sort)
The part_sort function uses the builtin cmp() which returns -1 if a is less
than b, 0 if a equals b, or 1 is a is greater than b. So far we are no
better than just calling .sort() without a function. Let's make a better
sorter.
def part_sort2(a, b):
a_left, a_right = a.split('_')
b_left, b_right = b.split('_')
return cmp(int(a_left), int(b_left)) or cmp(int(a_right), int(b_right))
this splits the values on underscore and then calls cmp(). We use int() to
turn each piece into a number for better sorting. The sorter works like
this:
if a_left < b_left:
return -1
else if a_left > b_left:
return 1
else if a_right < b_right:
return -1
else if a_right > b_right:
return 1
else:
return 0
the key is the second call to cmp() is not made if the first one yields a
result other than equal to.
Hope this helps.
More information about the Python-list
mailing list