所以我試圖找回的ñ商店列表,以使得它們的鄰居,然後,如果必要的話,鄰居的鄰居。以下是用於計算此列表的代碼,稱爲位置。商店的編號從1到10。的Python:list.pop(0)給出指數錯誤,而列表已滿
在這種情況下,每個商店有4個鄰居。這種關係在字典中被隨機設置,稱爲鄰居。
import random
shops = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
neighbours = {}
for i in shops:
neighbours[i] = random.sample(shops, 4)
while i in neighbours[i]:
neighbours[i] = random.sample(shops, 4)
print (neighbours)
shop_zero = random.randrange(1,11)
locations = [shop_zero]
neighborhd = neighbours[locations[0]]
n=10
while len(locations) < n:
if not neighborhd:
print('if statement')
neighborhd = neighbours[random.choice(locations)]
print (neighborhd)
print('while loop')
ne = neighborhd.pop(0)
if ne not in locations:
locations.append(ne)
print (locations)
的問題是,代碼工作有時但常常給我一個索引錯誤:
IndexError: pop from empty list
對於那些有興趣,以下是鄰居詞典輸出:
{1: [7, 5, 4, 9], 2: [5, 6, 3, 7], 3: [10, 8, 7, 6], 4: [7, 8, 10, 2], 5: [3, 6, 1, 9], 6: [5, 1, 10, 3], 7: [3, 8, 6, 2], 8: [10, 4, 9, 7], 9: [6, 5, 3, 2], 10: [3, 5, 8, 7]}
我已經添加了一些打印語句以使工作示例更具信息性。正如我前面所說,它每隔一段時間都會有效,但大多數情況下會導致索引錯誤。 請幫忙?
P.S.我意識到,由此產生的列表並不總是給我的羣集,而是一個從鄰居到鄰居的路徑。這對我正在進行的項目來說很好。
在'pop(0)'之前放一個'print(neighborhd)'並查看它的值。 –
你似乎認爲行'neighborhd = neighbors [random.choice(locations)]'總是會給你一個非空的列表。我沒有看到任何理由爲什麼會這樣。你能澄清你的推理嗎? –
@ A.Far請看下面的答案。謝謝 –