Python以二进制形式查找最大组合数

kyl*_*yth 3 python binary list

嗨我正在试图找出一个函数,其中给定列表的长度n [x1,x2 ... xn],基数为2的数字系统需要多少位数来为每个值分配一个唯一的代码.名单.

例如,一个数字可以包含两个唯一值:

x1 0
x2 1
Run Code Online (Sandbox Code Playgroud)

两位数可以容纳四位数:

x1 00
x2 01
x3 10
x4 11
Run Code Online (Sandbox Code Playgroud)

我正在尝试编写一个python函数calcBitDigits(myListLength),它接受此列表长度并返回所需的位数.calcBitDigits(2)= 1,calcBitDigits(4)= 2,calcBitDigits(3)= 2,等等

Tim*_*ers 7

>>> for i in range(10):
...    print i, i.bit_length()
0 0
1 1
2 2
3 2
4 3
5 3
6 3
7 3
8 4
9 4
Run Code Online (Sandbox Code Playgroud)

我不清楚你究竟想要什么,但看起来你想要从bit_length()回报中减去1 - 或者可能不是;-)

第三个想法;-),也许你真的想要这个:

def calcBitDigits(n):
    return (n-1).bit_length()
Run Code Online (Sandbox Code Playgroud)

至少在你提供的每个例子中都给出了你想要的结果.

注意:对于n大于0 的整数,n.bit_length()是以n二进制表示的所需位数. (n-1).bit_length()实际上是一种更快的计算方式int(math.ceil(math.log(n, 2))).

澄清:我现在理解原始问题;-)以下是如何思考答案:如果你有n项目,那么你可以使用n整数0n-1包含它们的唯一代码.这需要多少位?n-1以二进制表示(最大代码)所需的位数.我希望这个答案显而易见而不是神秘;-)

正如评论所指出的那样,争论变得紧张n=1.那是一个怪癖(0).bit_length() == 0.所以要小心那个!