【发布时间】:2020-03-06 23:09:47
【问题描述】:
我觉得问这个问题很愚蠢,但我的记忆让我没有更好的选择。脑海中浮现的两种方法:
第一:
def f1(v):
return sum(2**i for i,va in enumerate(v) if va)
>>> f1([True, False, True])
5
第二:
def f2(v):
return int('0b' + "".join(str(int(va)) for va in v),2)
>>> f2([True, False, True])
5
我觉得 f1 几乎是 Python 的笨拙,而 f2 显然太丑了,因为我在多种数据类型之间跳转。也许是我的年龄......?
【问题讨论】:
-
有什么理由需要索引的总和吗?为什么你不能只做
sum(list_of_bools)在这种情况下等于2 -
@PyPingu 他们没有计算索引的总和。他们将布尔值解释为二进制数,其中第一个元素是个,第二个是二位,第三个是四位,依此类推。
-
我知道它实际上不仅仅是简单地对索引求和,但问题是“将布尔列表转换为整数”所以我想知道是否有某种原因可以直接求和不是所需要的。 FWIW 如果这是预期的结果,我真的不认为
f1是一个糟糕的解决方案。
标签: python python-3.x binary