如何在Ruby/Python中编写2个数字n和k的组合和置换



例如,如果我有100只可区分的狗,我想随机挑选其中的3只。有了一个袖珍计算器,我会做100C3或类似的事情。我如何在Ruby和Python中做到这一点?

第1版:Razvans和Riccardo Bucco解决了我的问题。(我掷了一枚公平的硬币,决定我给谁打勾,给谁投赞成票(。

谢谢大家。

Ruby有组合(和置换(:

(0...100).to_a.combination(3).to_a
(0...100).to_a.permutation(3).to_a

但如果你想从这个阵列中随机挑选3只狗,有一个样本:

(0...100).to_a.sample(3)
Ruby的数组方法combinationrepeated_combinationpermutationrepeated_permutation都返回Enumerator。枚举器有一个size方法,它返回枚举器的大小,如果不能延迟计算,则返回nil。令人高兴的是,在这些情况下,他们可以,例如:
#How many ways to take 12 random dogs out of 1000 :
puts (1..1000).to_a.combination(12).size # 1953840414726664053684327000

您可以在python中执行此操作:

from math import comb
n_combinations = comb(100, 3)

同样,对于排列:

from math import perm
n_permutations = perm(100, 3)

CCD_ 6和CCD_;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))
在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']

最新更新