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

新手上路,请多包涵

我正在尝试将列表映射为十六进制,然后在其他地方使用该列表。在 python 2.6 中,这很容易:

答: Python 2.6:

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

但是,在 Python 3.1 中,上述内容返回一个地图对象。

B: Python 3.1:

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

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

或者,有没有更好的方法来做到这一点?我的初始列表对象有大约 45 个项目,并且 id 喜欢将它们转换为十六进制。

原文由 mozami 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 559
2 个回答

做这个:

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

在 Python 3+ 中,许多迭代可迭代对象的进程本身返回迭代器。在大多数情况下,这最终会节省内存,并且应该让事情变得更快。

如果您要做的只是最终遍历此列表,则甚至无需将其转换为列表,因为您仍然可以遍历 map 对象,如下所示:

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

原文由 Kenan Banks 发布,翻译遵循 CC BY-SA 2.5 许可协议

Python 3.5 中的新功能:

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

感谢 额外的解包概括

更新

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

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

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

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

原文由 Israel Unterman 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题