2015-04-23 41 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

谢谢,那就是我一直在寻找的 –