Python 2.7 计算十六进制字符串的所有置换

Python 2.7 计算十六进制字符串的所有置换,python-2.7,hex,permutation,Python 2.7,Hex,Permutation,我想计算十六进制字符串的所有排列。从000000000000到FFFFFFFF。 目前我正在使用这个代码 def calc_hex(iterable, r): pool = tuple(iterable) n = len(pool) if not n and r: return indices = [0] * r yield tuple(pool[i] for i in indices) while True: fo

我想计算十六进制字符串的所有排列。从000000000000到FFFFFFFF。 目前我正在使用这个代码

def calc_hex(iterable, r):
    pool = tuple(iterable)
    n = len(pool)
    if not n and r:
        return
    indices = [0] * r
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != n - 1:
                break
        else:
            return
        indices[i:] = [indices[i] + 1] * (r - i)
        yield tuple(pool[i] for i in indices)

f = calc_hex('0123456789ABCDEF', 12)
但并非所有组合都已计算(例如,0022FB4D31F8缺失)

怎么了

非常感谢您的帮助。

鉴于“十六进制字符串的所有排列”实际上只是适当范围内所有整数的十六进制表示形式(
0
281474976710655
,在本例中),为什么不:

def hex_perms(digits=12):
    x = 0
    max_ = 16 ** digits
    while x < max_:
        yield '{:0{len}X}'.format(x, len=digits)
        x += 1
def hex_perms(数字=12):
x=0
最大=16**位
当x

请注意,您不能使用
xrange
,因为
Python int太大,无法将
16**12
转换为C long

如果不是n,r:
应该是
如果不是n,而不是r:
?您说的是“排列”,但也说的是“组合”,我认为您的意思可能更像“笛卡尔积”。这是三件不同的事情。在任何情况下,都有很多方法可以循环——你确定这是你真正需要的吗?那么这对暴力强制输入密码有好处吗;只包含字符{0..9}{A..F}?@tjt263是的,我想是的。酷,我只是被搞糊涂了,因为你说的“只是所有整数的十六进制表示”。我想这可能是指类似但不同的东西。这是否适用于所有版本的Python?我试着用python2.5运行它(因为它是可用的)。但它似乎没有输出。@tjt263您是如何尝试运行它的?只需调用该函数即可创建一个生成器,然后需要对其进行迭代。为什么是2.5?!现在已经很老了。@tjt263
用于十六进制烫发(4):打印烫发