當深入研究Python 的random 模組時,人們可能會偶然發現random.shuffle( 的令人困惑的行為) )。與預期相反,該函數在表面上對列表進行洗牌後似乎返回了空靈的 None 值。為了解開這個謎團,讓我們開始了解 random.shuffle 的內部工作原理。
與傳回修改後的資料結構的約定相反,random.shuffle ()選擇了一條更神秘的路徑。它默默地改變了它所應用的列表,沒有任何其行為的實際證據。這種微妙的改變被稱為“就地修改”,是許多修改資料結構的 Python API 方法的標誌。因此,random.shuffle() 傳回 None,留下一個未經任何明確確認的已洗牌清單。
要見證random.shuffle() 難以捉摸的工作,請考慮以下內容代碼:
x = ['foo', 'bar', 'black', 'sheep'] from random import shuffle random.shuffle(x) print(x)
執行此程式碼將列印打亂後的列表,顯示結果random.shuffle() 的無形勞動。
但是,如果您的願望不僅僅是見證列表的轉變,而是創建一個新的打亂列表,其他途徑等著你。 Random.sample() 隨時可用,提供了一種產生現有清單的打亂副本的方法,同時保持原始清單不變:
shuffled_x = random.sample(x, len(x))
或者,sorted() 與 random.random()結合提供另一種通往打亂列表的路線,儘管會產生計算成本:
shuffled_x = sorted(x, key=lambda k: random.random())
這兩種方法都會產生列表的打亂副本,允許您在不破壞原始列表的情況下操作新列表。
random.shuffle() 函數的特殊行為一開始可能會引起人們的注意,但了解其就地修改性質並探索替代方法創建新的隨機列表使您能夠有效地利用其隨機魔法。
以上是為什麼 Python 的 random.shuffle() 會回傳 None ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!