2014-04-01 42 views
0

學習python我正在實施Bulls and Cows。所以我需要生成一個「隨機」數字。我嘗試這樣做:IndexError on list.pop()列表理解

possibilities = range(10) 
number = "".join([str(possibilities.pop(random.choice(possibilities))) for i in range(4)]) 

,我認爲是一個很好的解決問題的方法,但一旦在每兩奔跑,我得到該線路上的IndexError:IndexError: pop index out of range

所以看起來random.choice( )給了我一個不存在的指數。怎麼來的? 或者我做了一個錯誤的假設,而完全是其他問題? 想想吧,我還沒有一個線索如何調試這樣的陳述,任何指針呢?

編輯
我的第一個解決方案是程序種:

for i in range(4): 
    idx = random.choice(possibilities) 
    number = number + str(possibilities[idx]) 
    del possibilities[idx] 

此代碼似乎做同樣的事情與上面的一行,但無論如何沒有問題。

回答

2

您並非隨機選擇指數,從列表中選擇。如果你從列表中選擇一個較低的數字或兩個數字後選擇9,該怎麼辦?

相反,使用random.sample

number = "".join(map(str, random.sample(range(10), 4))) 
+0

你是對的,我怎麼能錯過了..感謝這個偉大的解決方案! –