我撰寫了一個程式,根據元素的頻率對給定的整數串列進行排序。即具有較高頻率的元素首先出現。如果兩個元素的頻率相同,則較小的數字在前。
但是我的代碼沒有正確列印輸出我使用了比較器并匯入了functools庫并使用了 sub 函式cmp_to_key來生成最終結果。
這是我的代碼
class Element:
def __init__(self, val, freq, idx):
self.val = val
self.freq = freq
self.idx = idx
import functools
class Solution:
def sortElements(self, array):
frequency = self.findFrequencies(array)
elements=[]
for i in range(len(array)):
val = array[i]
freq = frequency[val]
idx = i
el=Element(val,freq,idx)
elements.append(el)
sortedElements = sorted(elements, key=functools.cmp_to_key(self.customSortingComparator))
for i in sortedElements:
print(i.val, end=" ")
def customSortingComparator(self, e1, e2):
#print("E1: ",e1.val, e1.freq, e1.idx)
#print("E2: ",e2.val, e2.freq, e2.idx)
if(e1.freq!=e2.freq):
return 1 if e1.freq<e2.freq else -1
if(e1.idx!=e2.idx):
return -1 if e1.idx<e2.idx else 1
if(e1.val!=e2.val):
return -1 if e1.val<e2.val else 1
def findFrequencies(self, array):
frequency={}
for i in array:
frequency[i] = frequency.get(i, 0) 1
return frequency
sol=Solution()
sol.sortElements([2, 5, 2, 6, -1, 9999999, 5, 8, 8, 8])
Output: 8 8 8 2 5 2 5 6 -1 9999999
Desired O/P: 8 8 8 2 2 5 5 6 -1 9999999
我懷疑比較器邏輯中的錯誤,有人可以幫我解決這個問題嗎?
以下是一些限制條件:
- 無法使用 lambda 函式獲取結果,
- 不能使用任何外部庫(如 pandas、numpy 等)來獲得結果
- 這個練習必須嚴格執行,利用
functools.cmp_to_key需要在 sorted() 函式中傳遞的那個。
uj5u.com熱心網友回復:
問題似乎是由 idx 而不是 val 排序引起的。
洗掉這個:
if(e1.idx!=e2.idx):
return -1 if e1.idx<e2.idx else 1
不知道你為什么把它放在那里,考慮到限制。
uj5u.com熱心網友回復:
integers, counts = np.unique(a, return_counts=True)
order = np.argsort(counts)[::-1]
result = pd.DataFrame({'integers':integers[order], 'counts':counts[order]})
display(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/381471.html
下一篇:字典排序后,輸出不一樣?
