[[102, 106], [106, 107], [101, 106], [104, 105, 106], [105], [103, 105], [104]]
希望的輸出:
[102, 107, 101, 106, 105, 103, 104]
原始數組的每個索引實質上是可能性的列表爲結果數組中的索引。目標是在結果數組中表示每個數字一次。我很難爲此任務找到適當類型的算法。人們會採取什麼樣的普遍方法來解決這種問題?
[[102, 106], [106, 107], [101, 106], [104, 105, 106], [105], [103, 105], [104]]
希望的輸出:
[102, 107, 101, 106, 105, 103, 104]
原始數組的每個索引實質上是可能性的列表爲結果數組中的索引。目標是在結果數組中表示每個數字一次。我很難爲此任務找到適當類型的算法。人們會採取什麼樣的普遍方法來解決這種問題?
這裏的,只是使用的所有解決方案的一個關鍵的set
的長度max
一個簡單的解決方案:
>>> import itertools as it
>>> data = [[102, 106], [106, 107], [101, 106], [104, 105, 106], [105], [103, 105], [104]]
>>> max(it.product(*data), key=lambda x: len(set(x)))
(102, 107, 101, 106, 105, 103, 104)
我喜歡它。 lambda的好用法 –
這是超級聰明的,適合我的目的。謝謝! – JTApps
你可以使用unique_everseen
你已經夷爲平地名單後:
# sample input
data = [[102, 106], [106, 107], [101, 106], [104, 105, 106], [105], [103, 105], [104]]
from more_itertools import unique_everseen
data = list(unique_everseen([a for sub in data for a in sub]))
注:'more_itertools'需要使用'pip'明確安裝。 –
什麼你確切地說是唯一的意思?我發現這個問題有點模糊,因爲它現在是... –
每個數字應該出現在最終列表中,並且可以從位於同一索引中的原始數組中選擇每個索引。 – JTApps
啊,所以你基本上是在尋找一個一維數獨謎題的求解器,其中數組給出了給定位置所有允許的數字,每個數字只能出現在1個位置? –