计算十六进制字符串的所有排列

时间:2015-04-15 14:46:55

标签: python-2.7 hex permutation

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

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)。

出了什么问题?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

鉴于“十六进制字符串的所有排列”实际上只是适当范围内所有整数的十六进制表示(0281474976710655,在这种情况下) ,为什么不:

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

请注意,您不能xrange使用Python int too large to convert to C long,因为16**12