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.