Path: ...!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Malcolm McLean Newsgroups: comp.lang.c Subject: Re: Baby X is bor nagain Date: Wed, 19 Jun 2024 17:52:11 +0100 Organization: A noiseless patient Spider Lines: 88 Message-ID: References: <20240613002933.000075c5@yahoo.com> <20240613174354.00005498@yahoo.com> <20240617002924.597@kylheku.com> <20240618115650.00006e3f@yahoo.com> <20240618184026.000046e1@yahoo.com> <877celzx14.fsf@nosuchdomain.example.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 19 Jun 2024 18:52:11 +0200 (CEST) Injection-Info: dont-email.me; posting-host="1d7282bfc8cc6ef119aa4ef8aa4826c3"; logging-data="2174998"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/hMCcwMWKPEGzwx942uTOrU4oefUjAxdY=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:TIOuH5oXFfugBED8fX8LuKzcBM0= Content-Language: en-GB In-Reply-To: Bytes: 4963 On 19/06/2024 11:42, David Brown wrote: > On 19/06/2024 11:25, Malcolm McLean wrote: >> On 18/06/2024 23:49, Keith Thompson wrote: >>> Malcolm McLean writes: >>> [...] >>>> And it didn't take long to get Python to sort the list alphabetically, >>>> but there seemed no way in to the sort comparision function >>>> itself. And I had to give up. >>> >>> >>> https://docs.python.org/3/library/functions.html#sorted >>> https://docs.python.org/3/library/stdtypes.html#list.sort >>> >>> >> key specifies a function of one argument that is used to extract a >> comparison key from each element in iterable (for example, >> key=str.lower). The default value is None (compare the elements >> directly). >> >> You see the problem. I can sort on any field. I can sort alphaetically >> upwards and downwards. But I don't want to do that. I want to use a >> non-alphabetical comaprison function on two fields, and I need to >> specify that myself, because it's impossible that it is available >> anywhere. And that is to sort alphalbetically, except where the >> strings match except for an emedded "_L_" or "_D_" where the string >> wth the embedded "L" shoud be treated as closer to A than the string >> with the emebdded "_D_". >> > > def LD_key(n) : >     if "_L" in n : return (0, n) >     if "_D_" in n : return (1, n) >     return (2, n) > > Now you have a key function that will put all names containing "_L_" > first, then all names containing "_D_", then everything else, with > alphabetic sorting within those groups. > Yes, but that's not quite what we want. A typical input would go. quill_icon_D_.png quill_icon_D_@2x.png quill_icon_L_.png quill_icon_L_@2x.png aardvark.png zebra.png and the ouput we want is aardvark.png quill_icon_L_.png quill_icon_D_.png quill_icon_L_@2x.png quill_icon_D_@2x.png zebra.png > There is no problem here - you just have to think about things in a > different way. > > (I don't know why Python 3 dropped the comparison function support from > sort()/sorted().  It might be that a key function is more efficient, > since you call it once for each item rather than once for each comparison.) > >> And I'm sure there is some way to achiev e this. But in C, it s >> achieved simply by declaring that qsort takes a function pointer to >> user-supplied code. >> > > Yes, there is some way to achieve this all in Python.  And like pretty > much every other question that is commonly asked, google will tell you > the answer.  Sometimes things seem hard - then you do a little research, > learn a bit, and then its easy. > > I struugled with it for a while and, as you say, had recourse to the web. It was the very first Python program I tried to write, and it semmed unacceptably difficult to carry out a simple customised sort. I got alphabetical sorting going quite easily, but you don't need scripting for that. It wasn't what I was ment to be spending my time on anyway. So I had to drop the idea of automating the collation of resources with a Python script. -- Check out my hobby project. http://malcolmmclean.github.io/babyxrc