簡介
從列表生成排列時,標準itertools 庫會跳過元素重複的組合。為了獲得所有可能的排列,包括那些有重複的排列,使用笛卡爾積。
Itertools 排列
itertools 中的 permutations() 函數產生沒有重複的排列。在擲骰子的情況下,這不包括 (1, 1) 這樣的組合,其中兩個骰子上出現相同的數字。
笛卡爾積
之間的笛卡爾積兩個集合創建一個包含所有有序對的新集合,其中第一個元素來自第一個集合,第二個元素來自第二個集合。例如,{1, 2} 和 {3, 4} 的笛卡爾積為 {(1, 3), (1, 4), (2, 3), (2, 4)}。
將笛卡爾積應用於骰子
使用笛卡爾積產生所有可能的重複骰子組合產品:
import itertools x = [1, 2, 3, 4, 5, 6] dice_combinations = [p for p in itertools.product(x, repeat=2)]
範例結果
輸出將是36 個有序對的列表,包括(1, 1) 等組合:
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]
隨機骰子滾動
從笛卡爾乘積列表中選擇一對可以獲得隨機骰子滾動:
import random random_roll = random.choice(dice_combinations)
以上是笛卡爾積如何產生重複排列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!