it was a bit tricky, thanks :) On Tue, Nov 24, 2009 at 9:00 AM, Lie Ryan <lie.1...@gmail.com> wrote:
> Shashwat Anand wrote: > >> I intended to sort a list which sorts according to user-defined custom >> sorting-order. >> For example: If sorting-order is "zabc...wxy", then the output will be in >> lexicographically sorted order but z will always be given priority over rest >> others. >> as a test case i took sorting order as reverse of normal sorting, hence i >> defined user_key as string.ascii_lowercase. It should sort in reverse manner >> but I'm not getting expected output. >> (Even though it could have just been sorted as reverse=True, but my >> intention is to generalize it for this is just a test-case). I'm not able to >> find where the bug lies nor am i exactly sure how the key function works, >> even though i use it in a regular fashion. Can you guys help me out ? >> > > Your code is not wrong. It's your expected output (or your need) that's > different from a typical definition of "lexicographical sorting". In a > typical lexicographical sorting "a" comes before "ab" since "a" is shorter > than "ab". > > > So, if you want this: > > expected output: ['cba', 'cab', 'abc', 'ab', 'aa', 'a'] >> > you must use a custom cmp= argument to reverse the shorter substring case: > > > like this: > > import string > > def my_cmp(s1, s2): > if s1.startswith(s2): > return -1 > elif s2.startswith(s1): > return 1 > else: > return cmp(s1, s2) > > > def userdef_sort(l, user_key): > table = string.maketrans("".join(sorted(user_key)), user_key) > trans = lambda x: x.translate(table) > return sorted(l, cmp=my_cmp, key=trans) > > > #user_key = raw_input() > user_key = string.ascii_lowercase[::-1] > l = ['a', 'aa', 'ab', 'abc', 'cba', 'cab'] > > print userdef_sort(l, user_key) > > _______________________________________________ > Tutor maillist - Tutor@python.org > To unsubscribe or change subscription options: > http://mail.python.org/mailman/listinfo/tutor >
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor