Python中map()问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python中map()问题相关的知识,希望对你有一定的参考价值。

def char(s):
digits = '0': 0, '1': 1, '2': 2,'3': 3, '4': 4, '5': 5, '6': 6,'7': 7, '8': 8, '9': 9
return digits[s]
list(map(char,'12345'))
为什么输出的是
[1,2,3,4,5]

def char(s):
digits = '0': 0, '12345': 1, '2': 2,'3': 3, '4': 4, '5': 5, '6': 6,'7': 7, '8': 8, '9': 9
return digits[s]
list(map(char,'12345'))
为什么这个会报错?

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

你传入的 '12345'字符串也是属于列表。每个元素就是 ['1','2','3','4','5']

所以第一个输出的无可厚非。

第二个报错其实原因就是因为你的digits里面没有'1'这个key,所以会报错。

根本不会出现'12345'这个key的。如果想出现,就把代码修改下

def char(s):
    digits = '0': 0, '12345': 1, '2': 2,'3': 3, '4': 4, '5': 5, '6': 6,'7': 7, '8': 8, '9': 9
    return digits[s]
list(map(char,['12345','2','3','4','5']))

参考技术A map的作用是把‘12345’分为‘1’,‘2’,‘3’,‘4’,‘5’分别作为参数传入char函数中。所以这就是为什么结果是[1,2,3,4,5],后面的错误也是你把‘1’这个key改掉了,找不到了,自然就报错了。 参考技术B 因为在map的第二个参数中传入字符串时是按照拆分字符串的方法,将字符串中每一个字符作为第一个参数也就是char函数的参数。第二个里面你把'12345'作为map的第二个参数,就被拆分为1到5各5个字符,但是在digits中没有1这个key所以报错 参考技术C 我今天也遇到这个问题了,可能是map函数返回值被回收
我在查资料后发现在python3版本map函数返回值是迭代器,而在python2版本map函数的返回值是列表

所以如果你使用的是python3版本,只需要将:a = map(square, [1, 2, 3, 4])
修改为:a = list(map(square, [1, 2, 3, 4]))

解决Python3下map函数的显示问题

今天小编就为大家分享一篇解决Python3下map函数的显示问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
map函数是Python里面比较重要的函数,设计灵感来自于函数式编程。Python官方文档中是这样解释map函数的:

map(function, iterable, …)
Return an iterator that applies function to every item of iterable, yielding the results. If additional iterable arguments are passed, function must take that many arguments and is applied to the items from all iterables in parallel. With multiple iterables, the iterator stops when the shortest iterable is exhausted.

即map函数接收的第一个参数为一个函数,可以为系统函数例如float、或者def定义的函数、或者lambda定义的函数均可。

举一个简单的例子,下面这个例子在Python2.7下是可以正常显示的:

注意:很多人学Python过程中会遇到各种烦恼问题解决不了。为此小编建了个Python全栈免费答疑交流.裙 :624440745,不懂的问题有老司机解决里面还有最新Python教程项目可拿,

ls = [1,2,3]
rs = map(str, ls)
#打印结果
[‘1‘, ‘2‘, ‘3‘]
lt = [1, 2, 3, 4, 5, 6]
def add(num):
return num + 1
rs = map(add, lt)
print rs          
#[2,3,4,5,6,7]

但是在Python3下我们输入:

ls=[1,2,3]
rs=map(str,ls)
print(rs)


显示的却是:

<map at 0x3fed1d0>

而不是我们想要的结果,这也是Python3下发生的一些新的变化,如果我们想得到需要的结果需要这样写:

ls=[1,2,3]
rs=map(str,ls)
print(list(rs))

这样显示的结果即为我们想要看到的。这一点在《机器学习实战》的第10章中会有一点帮助。
推荐我们的python学习基地,看前辈们是如何学习的!

注意:很多人学Python过程中会遇到各种烦恼问题解决不了。为此小编建了个Python全栈免费答疑交流.裙 :624440745,不懂的问题有老司机解决里面还有最新Python教程项目可拿,,一起相互监督共同进步!

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

以上是关于Python中map()问题的主要内容,如果未能解决你的问题,请参考以下文章

python3中map()和reduce()函数的使用

Python3的map函数中排除空值

计算Python中出现的次数[重复]

python的append的NoneType问题 & map批量向列表中追加元素

python多处理pool.map挂起

Python中是不是有类似于C++ STL map的结构?