我有一個Python中可能包含重複的數字列表。我需要對重複值進行小計處理,然後解壓縮重複項以返回原始列表並跟蹤每個小計中使用的值。我遇到了第一輪小計導致新副本必須小計的問題。例如,列表[10,10,20,50,50,75]應被細分爲[40,100,75],因爲重複的10s的小計導致新的重複的20s需要被小計。小計列表值重複,直到沒有重複保留
我試過使用下面的代碼來創建一個重複的字典並跟蹤每個的出現次數,但是這種方法在這種情況下不起作用。
import collections
def compress_dups(values):
compressed_indices = []
for val in set(values):
indices = [i for i, x in enumerate(values) if x == val]
compressed_indices.append(indices)
return(compressed_indices)
compress_dict = collections.OrderedDict()
initial_list = [10, 10, 20, 50, 50, 75]
compressed_list = []
g = compress_dups(initial_list)
print(initial_list)
for item in g:
compressed_list.append(len(item)*initial_list[min(item)])
compress_dict[(len(item)*initial_list[min(item)])] = len(item)
print(sorted(compressed_list)) #this is the subtotaled list I'll work with
for k,v in reversed(compress_dict.items()):
del compressed_list[compressed_list.index(k)]
for x in xrange(v):
compressed_list.append(k/v)
print(sorted(compressed_list)) # this is the list after it's unpacked
所需的輸出:
[10, 10, 20, 50, 50, 75]
[40, 75, 100]
[10, 10, 20, 50, 50, 75]
你爲什麼要做'min(item)'? –
如果'[10,20,20,10]'應該輸出什麼? –