Liste des Groupes | Revenir à cl c |
On 19/06/2024 11:25, Malcolm McLean wrote:Yes, but that's not quite what we want. A typical input would go.On 18/06/2024 23:49, Keith Thompson wrote:def LD_key(n) :Malcolm McLean <malcolm.arthur.mclean@gmail.com> writes: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).
[...]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>
>
>
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_".
>
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 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.
(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.
>
Les messages affichés proviennent d'usenet.