我已經拿了一些東西,它出來NPython:如何製作n個數字的列表並隨機選擇任意數字?
現在我想有一個列表,其中包含0到N的數字。 實例: N = 5 然後,count_list = [1, 2, 3, 4, 5]
我將如何能夠做到這一點?
而且,一旦我已經創建的列表, 我想隨機選擇從該列表中的號碼,並使用該號碼。 之後,我想從列表中剩餘的數字(N-1)中選擇另一個數字,然後再使用它。 這就是它的列表是空的。 有人可以幫我這個嗎? 感謝
我已經拿了一些東西,它出來NPython:如何製作n個數字的列表並隨機選擇任意數字?
現在我想有一個列表,其中包含0到N的數字。 實例: N = 5 然後,count_list = [1, 2, 3, 4, 5]
我將如何能夠做到這一點?
而且,一旦我已經創建的列表, 我想隨機選擇從該列表中的號碼,並使用該號碼。 之後,我想從列表中剩餘的數字(N-1)中選擇另一個數字,然後再使用它。 這就是它的列表是空的。 有人可以幫我這個嗎? 感謝
您可以通過類似的東西創造的元素的枚舉:
mylist = list(xrange(10))
,那麼你可以使用random.choice
功能選擇項:
import random
...
random.choice(mylist)
編輯:
正如Asim Ihsan正確指出的那樣,我的回答尚未解決OP的全部問題。若要從列表中刪除值,只是list.remove()
可以稱爲:
import random
...
value = random.choice(mylist)
mylist.remove(value)
你可以試試這個代碼
import random
N = 5
count_list = range(1,N+1)
random.shuffle(count_list)
while count_list:
value = count_list.pop()
# do whatever you want with 'value'
'while count_list:'足以測試count_list是否不是一個空列表... – eumiro
創建列表(編輯):
count_list = range(1, N+1)
選擇隨機元素:
import random
random.choice(count_list)
'[x + 1 for x in xrange(N)] == range(1,N + 1)' –
@larsmans第一個產生一個列表,最後 - 迭代器 –
我編輯了我的評論以使用'range'。 –
至於第一部分:
>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>
至於第二,閱讀: http://docs.python.org/library/random.html
>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]
這是一般的想法。
順便說一句,你還可能有興趣在閱讀本:
http://code.activestate.com/recipes/59883-random-selection-of-elements-in-a-list-with-no-rep/
有快速隨機選擇了幾個實現。
,如果你想選擇一個隨機元素,您不必指望的東西。只需使用random.choice()
並通過您的迭代:
import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
如果你真的要算來,使用random.randint(1, count+1)
。
您可以使用:
import random
random.choice(range(n))
或:
random.choice(range(1,n+1))
如果從1
到n
,而不是想從0
。
之後,我想從列表中選擇(N-1)的其餘數字另一號碼,然後使用該還。
然後,你可以說真的不希望從1到N創建編號的列表只是爲了撿一個(的目的,爲什麼不問在這個範圍內,直接一個隨機數,而不是明確它創建於選擇?),而是要洗牌這樣一個列表。幸運的是,您還可以使用random
模塊,只需使用random.shuffle
即可。
當然,如果你有一個龐大的數字列表,你只想畫幾下,那麼它肯定是有道理的繪製每個使用random.choice
並將其刪除。
但是...爲什麼你要選擇範圍內的數字,這對應於一些項目的數量?你打算使用數字來選擇其中一個項目嗎?不要那樣做;這會讓事情變得複雜。如果您想選擇其中一個項目,請直接進行 - 也可以使用random.choice
。
maitain a set
並刪除隨機拾取的元素(與choice
)直到列表爲空。
s=set(range(1,6))
import random
while len(s)>0:
s.remove(random.choice(list(s)))
print(s)
三種運行給三個不同的annswers
>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])
>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])
你的列表中包含1到N,不是零至N –
有多大你期望電量爲? 10? 10^8?這很重要;所有提供的答案都假設O(N)空間的複雜性......你確定你想要這個嗎?在你的問題中,你明確地說「現在我想要一份清單」,但我想確保你意識到這意味着什麼。 –
我從來沒有想過那麼深。我實際上是在尋找一個N大約20到30的列表。但是既然你已經提到了這個,作爲一個學習練習,你能否幫我做以下幾件事:1.是否是O(N)空間的複雜性? 2,當我的列表大約10^8時會發生什麼 – Sunny