对map函数的思考

今天在用到map函数的时候产生了一些问题,发现自己对于map函数的理解还是不够深刻,于是又查阅了相关的资料来学习和了解其功能,学习后写出自己的理解和看法,最主要的是它的返回值类型。

map是python中一个内置的函数,map函数的使用格式一般为: map(函数名, 序列名)
可以将一个或多个指定的序列根据选定的函数做映射。

值得注意的是在python3中,map() 所返回的不再是一个list, 而是一个可迭代的map对象。类似于<map object at 0x034B3E90>这样的。如果想转化为list类型,就用list(map())转化一下就可以了

下面通过看几个实例来便于我们了解map()函数:

1.将列表中的元素从 int类型 转化为 str 类型

这里给出一个list: list_1 = [1, 2, 3]
我们可以通过type(list_1[0])查看的元素类型。
这里list_1[0]的类型是int类型,下面可以通过map函数来将其元素类型转化为 str 类型。

>>> new_list = map(str, list_1)
>>> new_list
<map object at 0x036F28F0>
>>> type(new_list)
<class 'map'>

我们可以看到new_list返回的是一个可迭代类型行的map对象。
而对于这个map对象我们可以使用list()方法来进行类型转化。
>>> list(new_list)
['1', '2', '3']
此时我们可以清楚的看到列表list_1中的元素已经从 int 转化为 str 了。
完整代码:

list_1 = ['1', '2', '3']
new_list = list(map(str, list_1))
print(new_list)

在这里我们搞清楚了:map函数返回的值并不是list类型,如果我们需要使用list类型,就必须再调用list()方法来将他进行类型转化----list(map(function, iterable))。

ps: 其实如果仅仅想实现list中元素类型的转化用 列表解析 会更简单,这里是为了研究map函数才选择map去完成这个任务的
列表解析的做法:

list_1 = [1, 2, 3, 4]
new_list = [str(i) for i in list_1]
print(new_list)

其结果和上面使用map方法是一样的。

2.x = map(int, ‘3’) 和 x,y = map(int, input().split())

我们先直观的看一下二者的结果区别:
>>> x = map(int, '3')
>>> x
<map object at 0x036F2E30>

>>> x,y = map(int, input().split())
1 2
>>> x
1
>>> y
2
开始我在这就有一个疑问就是为什么一个x是map对象,而另一个x就是一个int实数了呢?

我对于这个现象的l理解就是map()函数返回值的类型没有变,都是可迭代的map对象。只不过刚开始我过于重视map对象这个字眼,而忽视了可迭代这个关键字。

我将上面的例子改一下可能就好理解许多。
>>> x = ['3']
>>> x
['3']

>>> x,y = ['1', '2']
>>> x
'1'
>>> y
'2'
我们可以将map对象变为list对象,都是可迭代类型,这么一来,这两个实例的结果为什么不同就不言而喻了。第一个x相当于接受了整个对象,而x,y则只是接受了对象里面的元素。
>>> map(int, input().split())
1 2
<map object at 0x036F2F90>

我们可以看到map(int, input().split())返回的其实和x = map(int, '3')的相同,仅仅就是因为他是可迭代的,所以在赋值的时候产生了差异。

对此我写下了我的理解:
①map 返回的是一个可迭代类型的值,但绝对不是list。
②x,y = map(int, input().split()) 将可迭代类型的值分开保存了,所以x, y 各有各的值(1和2)。
③x = map(int, ‘3’),map返回的仍然是一个可迭代对象,但是此对象只有一个元素,因此当赋值给x的时候并不是将其中的一个元素赋给了x,而是将整个对象赋给了x。就相当于 x,y = [1, 2] 和 x = [1] 一样,前面的x的值仅仅只是int类型的1,而后面的x则是列表类型的[1]。

其实以上的实例都很无聊,没有什么意义也没有什么含金量,但是通过对这两个实例的研究使我更加深刻地理解了map函数的作用和细节,收获还是很大的。

反思:
能出现这样的问题说明自己的基础知识还是不够牢固,还是有很多疑问当初学习的时候没有搞清楚,导致后面的学习会陷入很多不必要的坑点。这个暑假一定要将python基础在扎扎实实的学习一遍。
总结:
map()函数的返回值是一个 可迭代类型的map对象,通常用list()方法进行类型转换后使用。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值