gpt4 book ai didi

python-3.x - 给定索引的快速位串生成

转载 作者:行者123 更新时间:2023-12-03 16:19:24 25 4
gpt4 key购买 nike

这里的 a 是一个列表,例如 [34, 52, 57]

该函数接受此列表并创建一个长度为 64 的位串,其中除给定索引外的每个索引均为 0。

所以它看起来像 [0,0,....1,...1,..1,..0,0,0] 仅在索引处 [34, 52, 57] 我们有。

def bit_string_gen(a):

bit_string = []
for key, value in enumerate(range(64)):
if key in a:
bit_string.append(1)
else:
bit_string.append(0)

return bit_string

有没有更好的方法来做到这一点,也许使用 lambdamapitertools 而不是 enumerate .

最佳答案

你的方法的问题是你:

  • 每一位使用if语句;和
  • 使用in 测试,这可能相当昂贵。

更好的方法是:

def bit_string_gen(a):
bit_string = [0]*64
for value in a:
bit_string[value] = 1
return bit_string

所以在这里您只迭代 a 的值,并将这些位设置为 1

尽管如此,用 ints 列表对其进行编码有点奇怪。一个更紧凑的方法是将这个 binary 编码为一个整数。例如通过使用:

def bit_string_gen(a):
bit_string = 0
for value in a:
bit_string |= 1 << value
return bit_string

所以在最后一种情况下,如果您像示例输入中那样设置位,您将获得:

>>> bin(bit_string_gen([34, 52, 57]))
'0b1000010000000000000000010000000000000000000000000000000000'
>>> hex(bit_string_gen([34, 52, 57]))
'0x210000400000000'

关于python-3.x - 给定索引的快速位串生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43334235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com