我不知道如何創建演算法/用于解決以下問題:
如果我有一組 20 個元素(例如 A -> T)并且有一個長度為 8 的字串,我可以進行哪些排列?(我知道大約有 3.9 億)
例如,我們可以有 ABCDEFGH 或 EFHGATRI。
有沒有人有任何想法可以幫助我?
uj5u.com熱心網友回復:
如果您想要所有排列,考慮到可能性的數量,最好將其保留為生成器。為此,請使用itertools.permutations:
from itertools import permutations
from string import ascii_uppercase
letters = ascii_uppercase[:20]
perms = map(''.join, permutations(letters, r=8)) # this doesn't generate
# anything yet
# then use it lazily
for p in perms:
# do something
# or get elements one by one
next(perm)
如果您只想要隨機的可能性,請使用random.sample:
from random import sample
from string import ascii_uppercase
''.join(sample(ascii_uppercase[:20], 8))
示例輸出: 'IKEDQRTS'
uj5u.com熱心網友回復:
Python 對您的問題具有特定功能itertools.permutations
回傳可迭代元素的連續 r 長度排列。
所以,你可以用它來完成你的任務
["".join(x) for x in itertools.permutations("abcd", 3)]
> ['abc', 'abd', 'acb', 'acd', 'adb', 'adc', 'bac', 'bad', 'bca', 'bcd', 'bda', 'bdc', 'cab', 'cad', 'cba', 'cbd', 'cda', 'cdb', 'dab', 'dac', 'dba', 'dbc', 'dca', 'dcb']
此外,您可以使用生成器來減少 RAM 使用量
def perms():
for perm in itertools.permutations("abcdefghij", 5):
yield "".join(perm)
for p in perms():
print(p)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/395977.html
上一篇:我們如何找到距離原點最近的K個點,并在要考慮的距離相等時根據x坐標進行排序?
下一篇:剪紙演算法
