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,等等
>>> 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
整数0
来n-1
包含它们的唯一代码.这需要多少位?n-1
以二进制表示(最大代码)所需的位数.我希望这个答案显而易见而不是神秘;-)
正如评论所指出的那样,争论变得紧张n=1
.那是一个怪癖(0).bit_length() == 0
.所以要小心那个!