python map函数作用于一串数字

acs*_*acs 2 python string map

我一直在玩Python中的map函数,我正在寻找一些帮助来理解以下行为:

foo="12345"
print map(int,foo)
Run Code Online (Sandbox Code Playgroud)

给你[1, 2, 3, 4, 5].显然是int(foo)吐出来的12345.究竟发生了什么?由于字符串可以按字符迭代,因此上述两行是同义词

print [int(x) for x in foo]
Run Code Online (Sandbox Code Playgroud)

我知道他们会输出相同的结果,但幕后有什么不同吗?一个比另一个更有效还是更好?还有一个"pythonic"吗?

非常感谢!

Ash*_*ary 5

map() 在某些情况下,可能比使用列表推导更快一些,在某些情况下,map比列表推导慢.

使用内置功能时:

python -mtimeit -s'xs=xrange(1000)' 'map(int,"1234567890")'
10000 loops, best of 3: 18.3 usec per loop

python -mtimeit -s'xs=xrange(1000)' '[int(x) for x in "1234567890"]'
100000 loops, best of 3: 20 usec per loop
Run Code Online (Sandbox Code Playgroud)

与lambda,map()变慢:

python -mtimeit -s'xs=xrange(1000)' '[x*10 for x in "1234567890"]'
100000 loops, best of 3: 6.11 usec per loop

python -mtimeit -s'xs=xrange(1000)' 'map(lambda x:x*10,"1234567890")'
100000 loops, best of 3: 11.2 usec per loop
Run Code Online (Sandbox Code Playgroud)

但是,在python 3x中map()返回一个map对象,即迭代器