Я пытаюсь сделать сортировщик, который сортирует номер списка int.
Когда приведен список, сначала он изменяет его на двоичный и проверяет, сколько там 1, и сортирует их сначала в порядке возрастания..
Затем они переупорядочиваются среди чисел, имеющих одинаковое число единиц в их двоичном коде, если одно больше другого, пересортируются в порядке возрастания.
Например, дляучитывая [1,2,3,4]
возвращает [1,2,4,3]
def Sort(nums):
#to deprecated the duplicated nums
nums = list(set(nums))
#input nums are list
search_list = [] #it contains (dec, bin, card)
for i in range(len(nums)):
binary = bin(nums[i])[2:] #it returns str of binary of given input
count = 0
for j in range(0, len(binary)):
if binary[j] == str(1):
count += 1
else:
pass
dec_bin_card = (nums[i], binary, count)
search_list.append(dec_bin_card)
sorted_draft = sorted(search_list, key = lambda x: x[2]) #sort by cardinality
for i in range(len(sorted_draft)-1):
if sorted_draft[i][2] == sorted_draft[i+1][2]: #if has same count
if sorted_draft[i][0] > sorted_draft[i+1][0]:
sorted_draft[i], sorted_draft[i+1] = sorted_draft[i+1], sorted_draft[i]
else:
pass
sorted_final = [sorted_draft[i][0] for i in range(len(sorted_draft))]
return sorted_final