如果你的問題,允許傳遞關係,即x是該組中,只要它是在最多7遠離任何元素在組中,那麼這在我看來就像一個graph theory問題。更具體地說,你需要找到所有的connected components。
問題本身很容易用遞歸算法解決。你首先要創建一個字典,其中每個鍵都是元素之一,每個值都是一個元素列表,最多與該元素相距7。對於你的榜樣,你有這樣的事情:
for element in elements:
connections[element] = []
visited[element] = False
for another in elements:
if abs(element - another) <= limit:
connections[element].append(another)
這將使你這樣的事情
{
84: [86, 87, 89, 90],
86: [84, 87, 89, 90],
...
997: [999, 1000, 1002]
...
2014: []
}
現在你需要編寫一個遞歸函數,將作爲輸入的元素與列表,只要它能夠找到一個與當前元素相距最多7的元素,就會在列表中添加元素。
def group_elements(element, group):
if visited[element]:
return
visited[element] = True
group.append(element)
for another in connections[element]:
group_elements(another, group)
某處在代碼也需要記住您已經訪問過,以確保你不進入一個無限循環的元素。
visited = {}
您需要爲列表中的每個元素調用該函數。
groups = []
for element in elements:
if not visited[element]:
group = []
group_elements(element, group)
groups.append(group)
print group
此代碼應該給下面的輸出你的投入:
[[87, 84, 86, 89, 90], [2014], [1000, 1002, 997, 999]]
什麼是上面所列的烏爾預期輸出 –
輸出理想地[84,86,87,89,90]和另一個列表[997,999,1000,1002] – user1022788
請更新您的問題與預期的輸出。這個列表的大小是否最小?如果沒有'[2014]'也是一個解決方案。 – reto