我有一個像通過鍵生成一個列表的所有可能的子列表
[2, 2, 2, 2, 2, 3, 13, 113]
數據,然後我想通過自己生成的密鑰進行排序成單獨的列表。實際上我想生成全部可能的列表。
一些例子:
values: [2, 2, 2, 2, 2, 3, 13, 113]
keys: [0, 0, 1, 2, 1, 3, 3, 1]
sublists: [2, 2], [2, 2, 113], [2], [3, 13]
values: [2, 2, 2, 2, 2, 3, 13, 113]
keys: [0, 1, 0, 0, 0, 1, 1, 0]
sublists: [2, 2, 2, 2, 113], [2, 3, 13]
values: [2, 2, 2, 2, 2, 3, 13, 113]
keys: [2, 3, 0, 0, 4, 4, 1, 3]
sublists: [2, 2], [13], [2], [2, 113], [2, 3]
所有可能的密鑰由
def generate_keys(prime_factors):
key_size = len(prime_factors) - 1
key_values = [str(i) for i in range(key_size)]
return list(itertools.combinations_with_replacement(key_values, \
len(prime_factors)))
產生。然後我想我可以使用鍵的值轉移到子列表。這是我堅持的部分。我認爲itertools.groupby將是我的解決方案,但經過進一步調查,我看不出使用我的自定義列表作爲groupby的關鍵字。
如何使用這些密鑰將我的大列表分成更小的子列表?甚至有一種方法可以在不使用密鑰的情況下執行此操作。無論哪種方式,我不知道該怎麼做,看着其他堆棧溢出問題有eben在球場,但不完全是這個問題。
你知不知道你是一個TOTAL BOSS!?!?!?因爲你。 – nebffa
ps。如果你很樂意爲zip之類的東西提供一些解釋,defaultdict會做得很棒 - 有時候這些文檔有點複雜,像這樣的例子使它更簡單。這是一個獎勵,儘管 – nebffa
@nebffa defaultdict是允許字典具有默認值的字典的擴展。我們需要其中之一的原因是因爲'append'功能;我們將值添加到列表中。問題是,如果這個列表在'append'時不存在,我們會得到一個錯誤。 Defaultdict可以防止這種情況。 zip是一個函數,它從一個列表中獲取第一個對象,並從一個列表中獲取第二個對象,將它們放入一個元組中,然後將其輸出到列表中。並重申,在列表期間。我們在這裏使用它來爲你的價值分配你的鑰匙,準備字典。 – kreativitea