2015-04-23 2 views
0

Мне нужно пробовать k чисел в [-n, -1] union [1, n] без замены. Почему этот код не работает?Образец питона без 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 является Inplace операция. Он изменяет список и не возвращает ни одного. Вот почему вы видите ошибку. Вы должны создать список отдельно и передать его 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 (some code, k)'? –

+0

Спасибо, вот что я искал –

Смежные вопросы