Loading collection data...
Collections are a way for you to organize kata so that you can create your own training routines. Every collection you create is public and automatically sharable with other warriors. After you have added a few kata to a collection you and others can train on the kata contained within the collection.
Get started now by creating a new collection.
I was confused by all of this, lol. But after some review of lambda. I specifically didnt understand why you needed the (seemingly additional)
, nums)
in(count_set_bits(num), num))
. NiperGPT helped explain so I thought I'd make a note of it for anyone else currious.#per NiperGPT
Args:
How the Sorting Works:
The sorted() function uses the key function to determine the order of the elements. Here's how the comparison process happens:
For each element x in arr, the lambda function is called, and it returns a tuple: (count_bits(x), x).
Python's sorting algorithm then compares these tuples element by element. Python tuples are compared lexicographically (like words in a dictionary). This means:
First, it compares the first elements of the tuples (the count_bits(x)
values). If these are different, the elements are sorted based on the number of set bits. Elements with fewer set bits come earlier in the sorted list.
If the first elements of the tuples are the same (i.e., two numbers have the same number of set bits), then the second elements of the tuples are compared (the original x
values). This means that if two numbers have the same number of set bits, they are sorted in their natural numerical order.
Here's how the sorting would proceed:
input =
[5, 3, 7, 10, 1]
5
:count_bits(5)
returns 2. The tuple is(2, 5)
.3
:count_bits(3)
returns 2. The tuple is(2, 3)
.7
:count_bits(7)
returns 3. The tuple is(3, 7)
.10
:count_bits(10)
returns 2. The tuple is(2, 10)
.1
:count_bits(1)
returns 1. The tuple is(1, 1)
.Now, Python sorts based on these tuples:
(1, 1)
comes first because 1 < 2 and 1 < 3.(2, 3)
,(2, 5)
, and(2, 10)
all have the same first element (2). So, they are sorted based on the second element (3, 5, and 10), resulting in the order 3, 5, 10.(3, 7)
comes last because 3 > 2 and 3 > 1.Therefore, the final sorted list array_sorted
would be:
[1, 3, 5, 10, 7]