Deutsch English Français Italiano |
<v4ucmn$1u14i$1@dont-email.me> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!feed.opticnetworks.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: David Brown <david.brown@hesbynett.no> Newsgroups: comp.lang.c Subject: Re: Baby X is bor nagain Date: Wed, 19 Jun 2024 12:42:31 +0200 Organization: A noiseless patient Spider Lines: 54 Message-ID: <v4ucmn$1u14i$1@dont-email.me> References: <v494f9$von8$1@dont-email.me> <v49seg$14cva$1@raubtier-asyl.eternal-september.org> <v49t6f$14i1o$1@dont-email.me> <v4bcbj$1gqlo$1@raubtier-asyl.eternal-september.org> <v4bh56$1hibd$1@dont-email.me> <v4c0mg$1kjmk$1@dont-email.me> <v4c8s4$1lki1$4@dont-email.me> <20240613002933.000075c5@yahoo.com> <v4emki$28d1b$1@dont-email.me> <20240613174354.00005498@yahoo.com> <v4okn9$flpo$2@dont-email.me> <20240617002924.597@kylheku.com> <v4pddb$m5th$1@dont-email.me> <20240618115650.00006e3f@yahoo.com> <v4rv0o$1b7h1$1@dont-email.me> <20240618184026.000046e1@yahoo.com> <v4sd75$1ed31$1@dont-email.me> <877celzx14.fsf@nosuchdomain.example.com> <v4u85k$1t2pu$2@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Wed, 19 Jun 2024 12:42:31 +0200 (CEST) Injection-Info: dont-email.me; posting-host="496e798c2f4d7717891a7779c6d418c6"; logging-data="2032786"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18v5LnGJ+PRgUlghJcDHx40cjVmpkEvqPY=" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Cancel-Lock: sha1:FeSkNV4tSqfuRg61kV4VC2LfeCo= Content-Language: en-GB In-Reply-To: <v4u85k$1t2pu$2@dont-email.me> Bytes: 3970 On 19/06/2024 11:25, Malcolm McLean wrote: > On 18/06/2024 23:49, Keith Thompson wrote: >> Malcolm McLean <malcolm.arthur.mclean@gmail.com> 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. >> >> <OT> >> https://docs.python.org/3/library/functions.html#sorted >> https://docs.python.org/3/library/stdtypes.html#list.sort >> </OT> >> > 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. 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.