第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正確生成單詞而不重復

正確生成單詞而不重復

瀟瀟雨雨 2023-06-27 16:42:50
你能用 26 個字母的字母表組成多少個 5 個字母的單詞(不重復)?我正在編寫一個程序,它可以從 5 個字母生成名稱(只是單詞),格式為:輔音_元音_一致_元音_輔音。只有5個字母。拉丁語。我只是想了解我必須運行生成周期多少次。例如,在 65780 處,重復已經(jīng)開始。你能告訴我如何正確地做嗎?import randomimport xlsxwriterconsonants = ['B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q',              'R', 'S', 'T', 'V', 'W', 'X', 'Z']vowels = ['A', 'E', 'I', 'O', 'U', 'Y']workbook = xlsxwriter.Workbook('GeneratedNames.xlsx')worksheet = workbook.add_worksheet()def names_generator(size=5, chars=consonants + vowels):    for y in range(65780):        toggle = True        _id = ""        for i in range(size):            if toggle:                toggle = False                _id += random.choice(consonants)            else:                toggle = True                _id += random.choice(vowels)        worksheet.write(y, 0, _id)        print(_id)    workbook.close()names_generator()
查看完整描述

4 回答

?
慕無忌1623718

TA貢獻1744條經(jīng)驗 獲得超4個贊

您可以使用itertools.combinations來獲取 3 個不同的輔音和 2 個不同的元音,并獲取permutations它們來生成所有可能的“名稱”。


from itertools import combinations, permutations


names = [a+b+c+d+e for cons in combinations(consonants, 3)

                   for a, c, e in permutations(cons)

                   for vow in combinations(vowels, 2)

                   for b, d in permutations(vow)]

總共只有 205,200 = 20x19x18x6x5,因此對于 5 個字母來說根本不需要時間,但對于更多字母來說很快就會花費更長的時間。也就是說,如果“不重復”是指任何字母都不應出現(xiàn)超過一次。相反,如果您只是希望不重復連續(xù)的字母(這已經(jīng)通過交替輔音和元音來保證),或者不重復名稱(通過不隨機地構(gòu)造它們來保證),您可以itertools.product使用總共 288,000 個 = 20x20x20x6x6 名稱:


names = [a+b+c+d+e for a, c, e in product(consonants, repeat=3)

                   for b, d in product(vowels, repeat=2)]

如果您想以隨機順序生成它們,您可以只random.shuffle在后面列出列表,或者如果您只想要幾個這樣的名稱,您可以在結(jié)果列表上使用random.sample或。random.choice


查看完整回答
反對 回復 2023-06-27
?
揚帆大魚

TA貢獻1799條經(jīng)驗 獲得超9個贊

如果你想避免重復,你不應該使用隨機性,而只是生成所有這樣的 ID:


from itertools import product


C = consonants

V = vowels

for id_ in map(''.join, product(C, V, C, V, C)):

    print(id_)

或者


from itertools import cycle, islice, product


for id_ in map(''.join, product(*islice(cycle((consonants, vowels)), 5))):

    print(id_)


查看完整回答
反對 回復 2023-06-27
?
溫溫醬

TA貢獻1752條經(jīng)驗 獲得超4個贊

itertools 允許非重復排列

import itertools, re

names = list(itertools.product(consonants + vowels, repeat=5))


consonants_regex = "(" + "|".join(consonants) + ")"

vowels_regex = "(" + "|".join(vowels) + ")"

search_string = consonants_regex + vowels_regex + consonants_regex + vowels_regex + consonants_regex

names_format = ["".join(name) for name in names if re.match(search_string, "".join(name))]??

輸出:


>>> len(names)

11881376

>>> len(names_format)

288000


查看完整回答
反對 回復 2023-06-27
?
慕森王

TA貢獻1777條經(jīng)驗 獲得超3個贊

我想確?;卮鹉愕膯栴}

我只是想了解我必須運行生成周期多少次

因為我認為對問題有更好的直覺很重要。

您有 20 個輔音和 6 個元音,總共產(chǎn)生 20x6x20x6x20 = 288000 種不同的單詞組合。由于它是連續(xù)的,因此您可以將其拆分以使其更易于理解。您可以將 20 個不同的輔音作為第一個字母,然后為每一個添加 6 個元音 = 20x6 = 120。然后您可以繼續(xù)說,對于這 120 個組合,您可以為每個組合添加 20 個輔音 = 120x20 = 2400 。 .. 等等。


查看完整回答
反對 回復 2023-06-27
  • 4 回答
  • 0 關(guān)注
  • 283 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號