生成最多包含 20 个字母的单词

Generating words upto and including 20 letters

alphabet =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
key = ''
for a in range(26):
    key += alphabet[a]
    print(key)
    key = ''

for a in range(26):
    for b in range(26):
        key += alphabet[a]+ alphabet[b]
        print(key)
        key = ''

for a in range(26):
    for b in range(26):
        for c in range(26):
            key += alphabet[a]+ alphabet[b]+ alphabet[c]
            print(key)
            key = ''

嘿!我需要一个高效的程序来生成 20 个或更少字母的每个单词。我创建了上面的代码来生成所有可能的 1、2 和 3 字母单词。然而,这似乎是一种低效的方法。所以我的问题是:'Is There a more efficient method to generate these words upto and including 20 letters' 编辑:如果有帮助,我在 python 2.7.9

下面使用 itertools.product 生成字母组合和 ''.join 将它们连接成一个单词。

from string import ascii_lowercase as lowercase
from itertools import product

length = 5

for word in (''.join(x) for x in product(lowercase, repeat=length)):
    print(word)

几乎不管你做什么,这都需要很长时间。即使是一个 5 个字母的单词也有 26**5 种可能性,总计有 11881376 或将近 1200 万。除非生成所有 20 个字母组合是绝对必要的,否则您应该想办法避免它。

这是不可能的。可能性的数量太多了。如果20个字符以内的所有组合都可以轻松生成,那么密码破解就非常容易了。

假设我们每秒可以生成 1000 万个组合,生成仅 20 个字符的所有可能组合需要多长时间?请注意,这只是 20 个字符的单词 - 它不包括 19 个字符的单词或 6 个字符的单词。

>>> combinations = 20**26
>>> per_second = 10000000
>>> seconds_required = combinations / per_second
>>> combinations
6710886400000000000000000000000000
>>> int(seconds_required)
671088640000000000000000000
>>> days_required = seconds_required / 60 / 60 / 24
>>> int(days_required)
7767229629629629202432
>>> years_required = days_required / 365
>>> int(years_required)
21280081177067479040
>>> age_of_universe = 13800000000
>>> int(age_of_universe)
13800000000

您可以使用 itertools.product 生成特定长度的组合,但您需要计算特定长度所需的时间(以及使用了多少内存)。我想您会发现,一旦您输入了 8-10 个字母,计算起来就会变得不合理。

>>> from itertools import product
>>> import string
>>> l = list(product(string.ascii_lowercase, repeat=5))
>>> len(l)
11881376