我正在尝试将列表映射到十六进制,然后在其他地方使用列表.在python 2.6中,这很简单:
答: Python 2.6:
>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']
Run Code Online (Sandbox Code Playgroud)
但是,在Python 3.1中,上面返回了一个map对象.
B: Python 3.1:
>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>
Run Code Online (Sandbox Code Playgroud)
如何在Python 3.x上检索映射列表(如上面的A中所示)?
或者,有更好的方法吗?我的初始列表对象有大约45个项目,id喜欢将它们转换为十六进制.
我正在测试一个修复程序pdb.set_trace(),以确保它在实现之前按照我预期的方式工作并且不断出现一个奇怪的错误.
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
Run Code Online (Sandbox Code Playgroud)
所以我搬到了我的本地机器,以确保在寻求帮助之前尽可能简单地复制.在ipython中,我得到完全相同的行为.
In [1]: test = [1,2,3,4,4,3,2,1]
In [2]: max(range(len(test)),key=lambda i: test[i])
Out[2]: 3
In [3]: import pdb; pdb.set_trace()
--Call--
> /Users/tristanmatthews/anaconda/lib/python2.7/site-packages/IPython/core/displayhook.py(237)__call__()
-> def __call__(self, result=None):
(Pdb) test = [1,2,3,4,4,3,2,1]
(Pdb) max(range(len(test)),key=lambda i: test[i])
*** NameError: global name 'test' is not defined
Run Code Online (Sandbox Code Playgroud)
但在正常的命令行,它工作得很好:
tristan:~$ python
Python 2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09)
[GCC 4.0.1 (Apple Inc. build 5493)] on …Run Code Online (Sandbox Code Playgroud) 我无法理解此Python调试程序会话中引发的以下异常:
(Pdb) p [move for move in move_values if move[0] == max_value]
*** NameError: name 'max_value' is not defined
(Pdb) [move for move in move_values]
[(0.5, (0, 0)), (0.5, (0, 1)), (0.5, (0, 2)), (0.5, (1, 0)), (0.5, (1, 1)), (0.5, (1, 2)), (0.5, (2, 0)), (0.5, (2, 1)), (0.5, (2, 2))]
(Pdb) max_value
0.5
(Pdb) (0.5, (0, 2))[0] == max_value
True
(Pdb) [move for move in move_values if move[0] == 0.5]
[(0.5, (0, 0)), (0.5, (0, 1)), (0.5, (0, …Run Code Online (Sandbox Code Playgroud)