gpt4 book ai didi

python - 产生所有排列的随机子集

转载 作者:太空宇宙 更新时间:2023-11-03 14:01:25 25 4
gpt4 key购买 nike

我正在寻找一种方法来随机抽取所有排列的固定长度子集。

import itertools
from random import shuffle

mylist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T']

方法A

下面的方法 A 存在排列过于相似的问题。

a_pre = itertools.permutations(mylist,20)
a = itertools.islice(a_pre,3)

list(a)

['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T']

['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'T', 'S']

['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'S', 'R', 'T']

方法B

方法 B 让我更接近我想要的结果,但这里总是存在在列表之间产生相同排序的风险,因此这种方法不可行。

#repeat n=3 times

shuffle(mylist)
print(mylist)

['J', 'B', 'M', 'A', 'O', 'C', 'K', 'S', 'H', 'Q', 'N', 'T', 'R', 'D', 'G', 'P', 'I', 'E', 'F', 'L']

['R', 'O', 'C', 'I', 'G', 'E', 'Q', 'L', 'P', 'J', 'F', 'N', 'A', 'B', 'H', 'T', 'D', 'K', 'M', 'S']

['L', 'O', 'I', 'G', 'B', 'E', 'R', 'A', 'D', 'N', 'J', 'S', 'H', 'F', 'K', 'M', 'Q', 'T', 'C', 'P']

最佳答案

but here there's always a risk of producing identical ordering between lists, so this approach is not feasible.

您可以使用元组(因为列表不可散列)和集合(因此没有重复/相同的列表)来解决这个问题:

from random import shuffle

mylist = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T']
myset = set()
while len(myset) < 5: #change 5 to however many you want
shuffle(mylist)
myset.add(tuple(mylist))
print([list(x) for x in myset])

编辑:作为@tobias_k指出:

For the given list, there are 20! = 2432902008176640000 different permutations, so collisions are really very unlikely.

关于python - 产生所有排列的随机子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48745222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com