Python暴力算法

2024-09-29 17:23:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要生成从给定字符集到给定范围的所有可能组合。 就像

charset=list(map(str,"abcdefghijklmnopqrstuvwxyz"))
range=10

结果应该是

[a,b,c,d..................,zzzzzzzzzy,zzzzzzzzzz]

我知道我可以使用已经在使用的库来完成这项工作,但是我需要知道它们是如何工作的,如果有人能用Python或任何可读的编程语言给我这种算法的注释代码,我将非常感激。


Tags: 代码算法maprange编程语言list字符集charset
3条回答

使用^{},结合^{}将各种长度放在一起:

from itertools import chain, product
def bruteforce(charset, maxlength):
    return (''.join(candidate)
        for candidate in chain.from_iterable(product(charset, repeat=i)
        for i in range(1, maxlength + 1)))

演示:

>>> list(bruteforce('abcde', 2))
['a', 'b', 'c', 'd', 'e', 'aa', 'ab', 'ac', 'ad', 'ae', 'ba', 'bb', 'bc', 'bd', 'be', 'ca', 'cb', 'cc', 'cd', 'ce', 'da', 'db', 'dc', 'dd', 'de', 'ea', 'eb', 'ec', 'ed', 'ee']

这将有效地使用输入集生成逐渐增大的单词,最大长度为maxlength。

不要试图生成一个包含26个字符、最长为10个字符的内存列表;而是对生成的结果进行迭代:

for attempt in bruteforce(string.ascii_lowercase, 10):
    # match it against your password, or whatever
    if matched:
        break

我发现了另一种使用itertools创建词典的简单方法。

generator=itertools.combinations_with_replacement('abcd', 4 )

这将遍历“a”、“b”、“c”和“d”的所有组合,并创建总长度为1到4的组合。即a、b、c、d、aa、ab……..、dddc、dddd。生成器是一个itertool对象,您可以像这样正常循环

for password in generator:
        ''.join(password)

每个密码实际上都是tuple类型的,您可以像平常一样处理它们。

如果你真的想用暴力来逼迫它,试试这个,但这需要你很长时间:

your_list = 'abcdefghijklmnopqrstuvwxyz'
complete_list = []
for current in xrange(10):
    a = [i for i in your_list]
    for y in xrange(current):
        a = [x+i for i in your_list for x in a]
    complete_list = complete_list+a

在一个较小的示例中,其中list='ab',我们只增加到5,这将打印以下内容:

['a', 'b', 'aa', 'ba', 'ab', 'bb', 'aaa', 'baa', 'aba', 'bba', 'aab', 'bab', 'abb', 'bbb', 'aaaa', 'baaa', 'abaa', 'bbaa', 'aaba', 'baba', 'abba', 'bbba', 'aaab', 'baab', 'abab', 'bbab', 'aabb', 'babb', 'abbb', 'bbbb', 'aaaaa', 'baaaa', 'abaaa', 'bbaaa', 'aabaa', 'babaa', 'abbaa', 'bbbaa', 'aaaba','baaba', 'ababa', 'bbaba', 'aabba', 'babba', 'abbba', 'bbbba', 'aaaab', 'baaab', 'abaab', 'bbaab', 'aabab', 'babab', 'abbab', 'bbbab', 'aaabb', 'baabb', 'ababb', 'bbabb', 'aabbb', 'babbb', 'abbbb', 'bbbbb']

相关问题 更多 >

    热门问题