我试图将一个列表映射为十六进制,然后在其他地方使用该列表。在python 2.6中,这很简单:
答:Python 2.6:
>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']
然而,在Python 3.1中,上述函数返回一个map对象。
B: Python 3.1:
>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>
如何在Python 3.x上检索映射列表(如上A所示)?
或者,有没有更好的方法来做这件事?我的初始列表对象有大约45项和id想把它们转换为十六进制。
Python 3.5的新功能:
[*map(chr, [66, 53, 0, 94])]
感谢附加的拆包概括
更新
我一直在寻找更短的方法,我发现这个方法也很有效:
*map(chr, [66, 53, 0, 94]),
在元组中也可以解包。注意结尾的逗号。这使它成为一个只有1个元素的元组。也就是说,它等价于(*map(chr, [66, 53, 0,94]),)
它比带列表括号的版本只短了一个字符,但是,在我看来,写起来更好,因为你直接从星号开始——展开语法,所以我觉得它更容易理解。:)
list(map(chr, [66, 53, 0, 94]))
Map (func, *iterables)——>映射对象
创建一个迭代器,该迭代器使用的实参计算函数
每个可迭代对象。当最短的可迭代对象耗尽时停止。
"创建迭代器"
意味着它将返回一个迭代器。
"使用来自每个可迭代对象的参数计算函数"
意味着迭代器的next()函数将获取每个可迭代对象的一个值,并将每个值传递给函数的一个位置形参。
因此,你从map()函数中获得一个迭代器,并将其传递给list()内置函数或使用列表推导式。
在pyton3中最好的方法。X
简单地说,你可以在单行中完成
#Devil
input_list = [66, 53, 0, 94]
out = [chr(x) for x in input_list]
print(out)
# you will get the desire output in out list
# ['B', '5', '\x00', '^']
#------------------------------
#To retrieve your list use 'ord'
original_list = [ord(x) for x in out]
print(original_list )
#[66, 53, 0, 94]