在Python 3.x中获取map()以返回列表

2024-04-16 22:46:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将列表映射成十六进制,然后在其他地方使用该列表。在Python2.6中,这很简单:

A:Python 2.6版:

>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']

但是,在Python3.1中,上面的语句返回一个map对象。

B:Python 3.1:

>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>

如何在Python 3.x上检索映射列表(如上面的A所示)?

或者,有更好的方法来做这个吗?我的初始list对象有大约45个项,id希望将它们转换为十六进制。


Tags: 对象方法idmap列表object地方语句
3条回答

Python3.5中的新功能和整洁功能:

[*map(chr, [66, 53, 0, 94])]

感谢Additional Unpacking Generalizations

更新

一直在寻找较短的方法,我发现这个方法也很有效:

*map(chr, [66, 53, 0, 94]),

解包也以元组的形式工作。注意末尾的逗号。这使它成为1个元素的元组。也就是说,它相当于(*map(chr, [66, 53, 0, 94]),)

它只比带列表括号的版本短了一个字符,但是,在我看来,写起来更好,因为你从星号开始——扩展语法,所以我觉得它在思想上更柔和。:)

执行以下操作:

list(map(chr,[66,53,0,94]))

在Python 3+中,许多在iterable上迭代的进程返回迭代器本身。在大多数情况下,这最终会节省内存,并会使事情发展得更快。

如果您要做的只是最终遍历这个列表,甚至不需要将其转换为列表,因为您仍然可以像这样遍历map对象:

# Prints "ABCD"
for ch in map(chr,[65,66,67,68]):
    print(ch)

你为什么不这么做:

[chr(x) for x in [66,53,0,94]]

这叫做列表理解。你可以在谷歌上找到很多信息,但是here's the link to the Python (2.6) documentation on list comprehensions。不过,你可能对the Python 3 documenation更感兴趣。

相关问题 更多 >