【问题标题】:Calculate all possible combinations of given characters to a given length计算给定字符的所有可能组合到给定长度
【发布时间】:2015-10-07 06:36:56
【问题描述】:

我正在尝试编写一个程序来计算给定字符的所有可能组合 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890... 但仅适用于 8 个点,例如 AAAAAAAAAAAAAAAaAAAAAAaa...

这样开始:

for i in xrange(999999999):
    print ''.join(['ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[j]

for j in [(i//d)%36 for d in (63,54,45,36,27,9,3,1)]])

【问题讨论】:

  • 你试过什么?你有代码吗?如果您的问题清晰、简洁和具体,我们能够最好地回答您的问题。
  • 我已经有一段时间没有学习离散数学了,但如果我没记错的话,你在这组中有 218 万亿个组合.....平均计算这需要几天时间计算机...如果您仍想完成此操作,则需要更具体地了解您的需求。你在这背后的数学和算法上有问题吗?还是难以实现容纳 218 万亿个对象的数据结构?
  • @BrennenSprimont 我的代码有问题。我更新了我的问题以表明我的意思。

标签: python passwords combinations


【解决方案1】:
mystring = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
from itertools import product
combos = [''.join(i) for i in product(mystring, repeat = 8)]
type(combos)

返回一个组合列表。

【讨论】:

  • 不错,但也许像这样,但对于 xrange(81) 中的 i 更大: print ''.join(['abcd'[j] for j in [(i//d)%3 d in (27,9,3,1)]])
  • 我将它更改为 mystring = 'AB' from itertools import product combos = [''.join(i) for i in product(mystring, repeat = 2)] 打印组合,现在它正在工作但它打印为 ['AA', 'AB', 'BA', 'BB'] 我怎么能没有括号、引号和逗号。
  • 最好将其放在不同的行上。如果有空格就好了。
  • 它正在创建一个列表。单引号表示它们是字符串。逗号表示列表中的项目结束/开始的位置。您可以遍历列表。你不想要一个清单吗?你想要什么类型的对象?
  • 是的,我想要一份清单
【解决方案2】:

这可能需要一段时间才能运行,因为有很多可能的排列。所以只要事先知道。我的解决方案:

from itertools import permutations

options = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890'
possibilities = [w for w in permutations(options, 8)]

这将列出存储在可能性变量中的所有可能的密码。

【讨论】:

  • 我收到类似这样的错误 Traceback(最近一次调用最后一次):文件“/Users/*****/Documents/untitled”,第 4 行,在 可能性 = [w for w in permutations(options, 8)] MemoryError
  • 这可能是因为排列太多导致您的内存不足。就像@Brennon Sprimont 所说,有大量可能的排列。
  • 我尝试将其缩短为 > options = 'AB' 但没有任何反应。
  • 您是否将排列中的 8 更改为 2?
  • 添加print possibilities以便您可以看到列表
【解决方案3】:

我的小生成器算法:

def combinator(karakterler, uzunluk):
    l = len(karakterler)
    for i in range(l ** uzunluk):
        s = ""
        for j in range(uzunluk):
            i, index = divmod(i,l)
            s += karakterler[index]
        yield s

for i in combinator("abc",3): print(i)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-29
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多