2015-04-23 24 views
0

我需要在[-n,-1] union [1,n]中取樣k個數字而無需替換。爲什麼這個代碼不工作?Python樣本沒有0

random.sample(range(-n,n+1).remove(0),k) 

我得到

Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/usr/lib/python2.7/random.py", line 319, in sample 
    n = len(population) 
TypeError: object of type 'NoneType' has no len() 

回答

1

remove是就地操作。它修改列表,並返回無。這就是你看到錯誤的原因。您需要單獨創建列表,並將它傳遞給sample

>>> l = range(-n, n+1) 
>>> l.remove(0) 
>>> random.sample(l, k) 

如果你想這樣做在一個聲明中,你可以單獨創建範圍的兩個部分,並添加他們。

>>> random.sample(range(-n, 0) + range(1, n+1), k) 
+0

這可以在調用'sample'內完成嗎?那就是'sample(某個代碼,k)'? –

+0

謝謝,那就是我一直在尋找的 –