gpt4 book ai didi

python - 不同标准的两次连续排序

转载 作者:行者123 更新时间:2023-12-01 09:25:51 25 4
gpt4 key购买 nike

我正在尝试制作一个对 int 列表的数量进行排序的排序器。

当给定列表时,首先将其转换为二进制并检查其中有多少个 1,然后首先按升序对它们进行排序。

然后,它们在二进制中具有相同数量的 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

最佳答案

这是一个单行解决方案:

sorted_nums = sorted(nums, key=lambda x: (bin(x).count('1'), x))

您的实现看起来不错,尽管效率非常低。问题很可能出在线路上

nums = list(set(nums))

这会删除列表中的所有重复元素,这似乎与问题的精神背道而驰。

关于python - 不同标准的两次连续排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50403085/

25 4 0
文章推荐: architecture - "Reusable Business Component"是神话吗?
文章推荐: java - 不同系统上的 SWT
文章推荐: .net - 编译器错误 : Cannot convert from 'List' to 'IList'