例如,如果我有 100 只可區分的狗,我想隨機選擇其中的 3 只。用袖珍計算器,我會做 100C3 或類似的東西。我怎樣才能在 Ruby 和 Python 中做到這一點?
第 1 版:我的問題已通過 Razvans 和 Riccardo Bucco 解決方案解決。(我擲了一次公平的硬幣來決定我給誰打勾和給誰投贊成票)。
謝謝大家。
uj5u.com熱心網友回復:
Ruby 有組合(和排列):
(0...100).to_a.combination(3).to_a
(0...100).to_a.permutation(3).to_a
但是,如果您想從該陣列中隨機選擇 3 只狗,則有示例:
(0...100).to_a.sample(3)
uj5u.com熱心網友回復:
Ruby的Array方法combination,repeated_combination,permutation和repeated_permutation所有回傳普查員。列舉器有一個size方法,它回傳列舉器的大小,如果不能懶惰計算,則回傳 nil。令人高興的是,在這些情況下,他們可以,例如:
#How many ways to take 12 random dogs out of 1000 :
puts (1..1000).to_a.combination(12).size # 1953840414726664053684327000
uj5u.com熱心網友回復:
你會在 python 中做到這一點:
from math import comb
n_combinations = comb(100, 3)
同樣,對于排列:
from math import perm
n_permutations = perm(100, 3)
perm并且comb只能與 python > 3.8 一起使用。對于舊版本的python,請使用以下函式:
from math import factorial
def comb(n, k):
return factorial(n) // factorial(k) // factorial(n - k)
def perm(n, k=None):
return factorial(n) // factorial(n - (k or n))
uj5u.com熱心網友回復:
在python中從100只隨機狗中選擇3只而不替換:
假設這個預先存在的串列:
dogs = [f'dog{i 1}' for i in range(100)]
# ['dog1', 'dog2', 'dog3', ..., 'dog100']
你可以用 random.sample
import random
random.sample(dogs, k=3)
可能的輸出: ['dog56', 'dog13', 'dog59']
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/366580.html
