0
當在Python 3中使用random
模塊random.shuffle(list(range(n)))
工作,但random.shuffle(range(n))
沒有。爲什麼random.shuffle(list(range(n)))有效,但random.shuffle(range(n))不?
這是爲什麼?
當我輸入type(range(n))
時,它返回range
。
當在Python 3中使用random
模塊random.shuffle(list(range(n)))
工作,但random.shuffle(range(n))
沒有。爲什麼random.shuffle(list(range(n)))有效,但random.shuffle(range(n))不?
這是爲什麼?
當我輸入type(range(n))
時,它返回range
。
Python 3的range
現在返回一個範圍對象(構造一個不變的序列)而不是一個列表(如Python 2)!
一個range-object(除了其他差異)不支持項目的分配,這是你觀察到(可能)錯誤:
File ".../random.py", line 272, in shuffle
x[i], x[j] = x[j], x[i]
TypeError: 'range' object does not support item assignment
線272是在python交換兩個變量的Python的路,這是大多數隨機算法中的常見操作(如Fisher-Yates)。
的docs也提到了這一點(如果你想整理序列):
要洗牌不可變的序列,並返回一個新的洗牌列表,使用樣品(X,K = LEN(X)),而不是
那麼這將工作(和相當於給出洗牌的任務):
shuffled_list = random.sample(range(n), k=n)
你首先創建一個列表的方式也未嘗不可,如果你能負擔得起的內存/時間。
您的問題涉及哪種語言? – Smile4ever
謝謝你,這是python –
你的問題是不正確的,如書面。輸入'random.shuffle(list(range(n)))'不會**工作,因爲'random.shuffle'就地工作並且不返回任何東西。將它應用到動態創建的參數將不會產生任何可見的結果。 – pjs