这里有一个列表,例如[0,0,....1,...1,..1,..0,0,0]
。
该函数接受此列表并创建一个长度为64的位字符串,其中除了给定索引外,每个索引都为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
才有。{/ p>
lambda
是否有更好的方法可以使用map
或itertools
或enumerate
代替{{1}}。
答案 0 :(得分:3)
您的方法存在的问题是:
if
语句;和in
测试。beter方法可以是:
def bit_string_gen(a):
bit_string = [0]*64
for value in a:
bit_string[value] = 1
return bit_string
所以这里只迭代a
的值,然后将这些位设置为1
。
然而,使用 int
s 列表对此进行编码有点奇怪。更简洁的方法是在整数上对此二进制进行编码。例如,使用:
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'
答案 1 :(得分:2)
如果你正在寻找使用map / lambda的解决方案,那么这里就是一个单行:
map(lambda x: 1 if x in [34, 52, 57] else 0, range(0, 64))