【发布时间】:2014-09-30 18:27:25
【问题描述】:
我有一个值列表
a = [88, 24, 128, 3]
现在我必须将这些值以二进制形式作为列表获取,例如
[0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1]
最终输出如下,它以十六进制值给出上述二进制列表中 1 的位置
[0x2, 0x4, 0x5, 0xc, 0xd, 0x11, 0x1f, 0x20]
我的尝试:应该给出二进制列表
[((b>>i)&1)for b in a for i in range(7,-1,-1)]
现在我不知道如何获得最终输出,但代码必须在同一行内代码中。
最终输出应该是一个列表,其中包含二进制列表中 1 的位置。
我需要一个内嵌代码,因为我在 eval 函数中使用了此代码
【问题讨论】:
-
我在字符串中有这个内嵌代码,内置的十六进制可能会影响它,即使使用内置的十六进制,我也无法获得最终输出
-
所以你想把一个整数扩展为一个8位二进制数,然后……将每个8位数字表示为两个十六进制,每个四位?那正确吗?那么
0101(5) 是如何到达0x2(2) 的呢?为什么你会从 4 位得到0x20?如果没有,你在做什么?您能描述一下您尝试实施的流程吗? -
你能解释一下你是如何从“二进制列表”到输出的吗?如果我采用二进制列表的“十六进制值”,我会得到
0x58188003,而不是八元素列表。 -
这里我想要一种映射,即二进制数组中的每个 1s 位置在最终输出中都应该有一个十六进制值。所以 0101(5) 在位置 2 有 1,在位置 4 有另一个 1。所以最终输出中有 [0x2 and 0x4]
-
哦,我明白了。因此,您将整个列表视为向后十进制数,然后输出是列表中
1s 的十六进制位置,从1开始?在那种情况下,你到底为什么想要那个?你为什么要尝试在一行中完成它?
标签: python