Please sort into order:
Tom Pearce
Bill Brewer
Peter Gurney
Peter Davy
Daniel Whiddon
Harry Hawk
Uncle Tom Cobbley
What would you do?
Bill Brewer
Uncle Tom Cobbley
Peter Davy
Peter Gurney
Harry Hawk
Tom Pearce
Daniel Whiddon
That's not a standard sort order for strings of text ... and if you've got each complete name in a string (as opposed to separate forename and surname fields) you would need to sort it by the last space separated string on each line.
Sort routines in most of the language we teach default to sorting strings Asciibetically (i.e alphabetically, but with lower case after upper case), and allow callback routines to be used to alter this behavior. What that means is that you call the sort routine, but pass in as a parameter a piece of code which tells the sort routine how it should grade pairs of records - with the sort routine then working out which of the pairs it needs to compare and doing all the clever control and management of the sorting process.
There's a new example of this (sorting by surnames)
[here] from last week's Python course. You'll note that - in Python - I've called the
cmp function internally to order two records, as once I have extracted the surname, I'm back to a conventional sort in this case.
cmp returns -1, 0 or +1 to indicate that the first parameter should come first, the two are equal in sort terms, or the first parameter should come second.
Some of our local characters at Widdicome (or should that be
Widecombe?) Fair vary the spelling of their surnames - I've see Tom Cobleigh as well as Tom Cobbley, for example - and other issues arise to when sorting names ...
Where several members of the same family / with the same surname are involved, you'll want to sort by the name as a whole once you've grouped by surname - that can often be a default sort:
def bysurname(this, that) :
sn1 = (author[this].split())[-1]
sn2 = (author[that].split())[-1]
vx = cmp(sn1,sn2)
if vx:
return vx
return cmp(this,that)
And you have matters such as differing cases, and people who have entered just initials rather that their forenames or who have (as is case of our Tom above) abbreviated Thomas to Tom and added a Titular Mr, Mrs, Ms, or Uncle.
But a Royal visit to Widdicome Fair bringing some overseas dignitaries would give some interesting people to sort. Just imagine ...
Elizabeth the Second
HRH Prince Philip
Lord Kinnock of Bedwellty
George Bush Senior
Archbishop of Canterbury
Benedict XVI
Mel Stride, MP
(written 2010-07-29, updated 2010-07-30)
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
Y111 - Python - More on Collections and Sequences [61] Python is a fabulous language - (2004-09-24)
[386] What is a callback? - (2005-07-22)
[633] Copying a reference, or cloning - (2006-03-05)
[899] Python - extend v append on a list - (2006-10-20)
[1304] Last elements in a Perl or Python list - (2007-08-16)
[1310] Callbacks - a more complex code sandwich - (2007-08-19)
[1869] Anonymous functions (lambdas) and map in Python - (2008-11-04)
[1873] List Comprehensions in Python - (2008-11-06)
[2718] Python - access to variables in the outer scope - (2010-04-12)
[2920] Sorting - naturally, or into a different order - (2010-08-14)
[2996] Copying - duplicating data, or just adding a name? Perl and Python compared - (2010-10-12)
[3150] Python dictionaries - mutable and immutable keys and values - (2011-01-29)
[3348] List slices in Python - 2 and 3 values forms, with an uplifting example - (2011-07-06)
[3439] Python for loops - applying a temporary second name to the same object - (2011-09-14)
[3797] zip in Python - (2012-07-05)
[4398] Accessing variables across subroutine boundaries - Perl, Python, Java and Tcl - (2015-01-18)
[4442] Mutable v Immuatble objects in Python, and the implication - (2015-02-24)
Q110 - Object Orientation and General technical topics - Programming Algorithms [202] Searching for numbers - (2005-02-04)
[227] Bellringing and Programming and Objects and Perl - (2005-02-25)
[642] How similar are two words - (2006-03-11)
[1157] Speed Networking - a great evening and how we arranged it - (2007-04-21)
[1187] Updating a page strictly every minute (PHP, Perl) - (2007-05-14)
[1391] Ordnance Survey Grid Reference to Latitude / Longitude - (2007-10-14)
[1840] Validating Credit Card Numbers - (2008-10-14)
[1949] Nuclear Physics comes to our web site - (2008-12-17)
[2189] Matching disparate referencing systems (MediaWiki, PHP, also Tcl) - (2009-05-19)
[2259] Grouping rows for a summary report - MySQL and PHP - (2009-06-27)
[2509] A life lesson from the accuracy of numbers in Excel and Lua - (2009-11-21)
[2586] And and Or illustrated by locks - (2010-01-17)
[2617] Comparing floating point numbers - a word of caution and a solution - (2010-02-01)
[2951] Lots of way of converting 3 letter month abbreviations to numbers - (2010-09-10)
[2993] Arrays v Lists - what is the difference, why use one or the other - (2010-10-10)
[3042] Least Common Ancestor - what is it, and a Least Common Ancestor algorithm implemented in Perl - (2010-11-11)
[3072] Finding elements common to many lists / arrays - (2010-11-26)
[3093] How many toilet rolls - hotel inventory and useage - (2010-12-18)
[3102] AND and OR operators - what is the difference between logical and bitwise varieties? - (2010-12-24)
[3451] Why would you want to use a Perl hash? - (2011-09-20)
[3620] Finding the total, average, minimum and maximum in a program - (2012-02-22)
[3662] Finding all the unique lines in a file, using Python or Perl - (2012-03-20)
[4325] Learning to program - what are algorithms and design patterns? - (2014-11-22)
[4401] Selecting RECENT and POPULAR news and trends for your web site users - (2015-01-19)
[4402] Finding sum, minimum, maximum and average in Python (and Ruby) - (2015-01-19)
[4410] A good example of recursion - a real use in Python - (2015-02-01)
[4652] Testing new algorithms in PHP - (2016-02-20)
[4656] Identifying the first and last records in a sequence - (2016-02-26)
[4707] Some gems from an introduction to Python - (2016-10-29)
Some other Articles
Programming Standards from the start!The Land of the Black LabradorLAMP - Linux, Apache, MySQL, PHP - install, configure, administerGlobal Computer Maintenance DepartmentSorting people by their namesExclamation marks and question marks on ruby method namesAlternative loops and conditionals in Ruby and PerlWiltshire Council ask how they can help businessesDates and times in PythonShould Python classes each be in their own file?