将真假数组转换为十六进制值 Python
我有一个包含真和假的答案的列表,像这样:
[True, True, True, False, False, True, False, False]
[True, True, False, False, True, False, False, True]
[True, False, False, True, False, False, True, True]
[False, False, True, False, False, True, True, True]
[False, True, False, False, True, True, True, False]
[True, False, False, True, True, True, False, False]
[False, False, True, True, True, False, False, True]
[False, True, True, True, False, False, True, False]
我想把真(True)赋值为1,把假(False)赋值为0,然后把这个总值转换成十六进制。 我该怎么做呢?我可以逐个查看列表中的每个值,如果它是'真'就把它改成1,如果是'假'就改成0,还是说有更简单的方法可以直接把整个列表转换成十六进制呢?
编辑:这是完整的代码在Pastebin上: http://pastebin.com/1839NKCx
谢谢
6 个回答
0
一句话总结:
>>> lists = [
[True, True, True, False, False, True, False, False],
[True, True, False, False, True, False, False, True],
[True, False, False, True, False, False, True, True],
[False, False, True, False, False, True, True, True],
[False, True, False, False, True, True, True, False],
[True, False, False, True, True, True, False, False],
[False, False, True, True, True, False, False, True],
[False, True, True, True, False, False, True, False]]
>>> ''.join(hex(int(''.join('1' if boolValue else '0' for boolValue in byteOfBools),2))[2:] for byteOfBools in lists)
'e4c993274e9c3972'
内连接会生成一个由八个零和一组成的字符串。
int(foo,2) 这个操作会把这个字符串当作二进制数转换成数字。
hex 会把这个数字转换成十六进制格式。
[2:] 这个操作会去掉标准十六进制格式前面的 '0x'。
外连接会对所有子列表进行类似的操作,然后把结果合并在一起。
0
这样做就可以了:
def bool_list_to_hex(list):
n = 0
for bool in list:
n *= 2
n += int(bool)
return hex(n)
1
如果你想把一系列的布尔值(也就是真或假的值)合并成一个值(像一个位字段),你可以这样做:
x = [True, False, True, False, True, False ]
v = sum(a<<i for i,a in enumerate(x))
print hex(v)
8
lists = [
[True, True, True, False, False, True, False, False],
[True, True, False, False, True, False, False, True],
[True, False, False, True, False, False, True, True],
[False, False, True, False, False, True, True, True],
[False, True, False, False, True, True, True, False],
[True, False, False, True, True, True, False, False],
[False, False, True, True, True, False, False, True],
[False, True, True, True, False, False, True, False],
]
for l in lists:
zero_one = map(int, l) # convert True to 1, False to 0 using `int`
n = int(''.join(map(str, zero_one)), 2) # numbers to strings, join them
# convert to number (base 2)
print('{:02x}'.format(n)) # format them as hex string using `str.format`
输出结果:
e4
c9
93
27
4e
9c
39
72