鱼C论坛

 找回密码
 立即注册
查看: 2435|回复: 4

[已解决]关于map函数的使用

[复制链接]
发表于 2023-3-15 19:36:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
matrix = [[1,3,2],[5,4,6],[8,7,9]]
print(list(map(sorted,matrix)))
print(list(map(sorted,matrix[0],matrix[1],matrix[2])))


程序结果:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Traceback (most recent call last):
  File "D:/PYTHON/py_learn.PY", line 3, in <module>
    print(list(map(sorted,matrix[0],matrix[1],matrix[2])))
TypeError: 'int' object is not iterable

疑问:
1.为什么第二个print报错呢?
2.为什么map函数直接对列表的列表排序呢?我直接用sorted(metrix)返回的结果是对每个列表排序。想请教程序的逻辑。

感谢!!
最佳答案
2023-3-15 19:42:57
1、为什么第二个print报错呢?

第二个print报错是因为map函数的使用方法不正确。

map函数的第一个参数应该是一个函数,而后面的参数是可迭代的数据结构。

在你提供的代码中,你试图将matrix[0], matrix[1], matrix[2]作为后续的参数传递给map函数,

但实际上这里应该传入一个可迭代的数据结构。这里你可以尝试使用zip函数。正确的代码如下:
print(list(map(sorted, zip(matrix[0], matrix[1], matrix[2]))))

2、为什么map函数直接对列表的列表排序呢?我直接用sorted(metrix)返回的结果是对每个列表排序。想请教程序的逻辑。

当你使用map函数时,你将sorted函数应用于matrix列表的每一个元素。这里的每一个元素是一个列表,

所以map函数会将sorted函数应用于每个子列表,从而得到按元素升序排列的子列表。所以结果是:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

如果你直接对matrix使用sorted函数,如sorted(matrix),那么sorted函数会按照子列表的第一个元素对子列表进行排序。

因为matrix的子列表已经按照第一个元素升序排列,所以sorted(matrix)的结果与matrix相同。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-15 19:42:57 | 显示全部楼层    本楼为最佳答案   
1、为什么第二个print报错呢?

第二个print报错是因为map函数的使用方法不正确。

map函数的第一个参数应该是一个函数,而后面的参数是可迭代的数据结构。

在你提供的代码中,你试图将matrix[0], matrix[1], matrix[2]作为后续的参数传递给map函数,

但实际上这里应该传入一个可迭代的数据结构。这里你可以尝试使用zip函数。正确的代码如下:
print(list(map(sorted, zip(matrix[0], matrix[1], matrix[2]))))

2、为什么map函数直接对列表的列表排序呢?我直接用sorted(metrix)返回的结果是对每个列表排序。想请教程序的逻辑。

当你使用map函数时,你将sorted函数应用于matrix列表的每一个元素。这里的每一个元素是一个列表,

所以map函数会将sorted函数应用于每个子列表,从而得到按元素升序排列的子列表。所以结果是:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

如果你直接对matrix使用sorted函数,如sorted(matrix),那么sorted函数会按照子列表的第一个元素对子列表进行排序。

因为matrix的子列表已经按照第一个元素升序排列,所以sorted(matrix)的结果与matrix相同。

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
歌者文明清理员 + 5 + 5 看来我是假大佬

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-3-15 19:46:56 | 显示全部楼层
sorted() 作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。
matrix[0] 是列表 [1,3,2]
调用map传入sorted(1) sorted(3) sorted(2)这样明显是不对的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 1

使用道具 举报

发表于 2023-3-15 20:20:57 | 显示全部楼层
本帖最后由 jhq999 于 2023-3-15 20:23 编辑
ba21 发表于 2023-3-15 19:46
sorted() 作为 Python 内置函数之一,其功能是对序列(列表、元组、字典、集合、还包括字符串)进行排序。
...

是不是
map(sorted,X)
相当于
for i in X:
        sorted(X)?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-15 20:45:02 | 显示全部楼层
isdkz 发表于 2023-3-15 19:42
1、为什么第二个print报错呢?

第二个print报错是因为map函数的使用方法不正确。

感谢不吝赐教!
但我还是有些地方不太理解
什么是可迭代的数据结构?是可迭代对象吗,如果是的话,列表不就是可迭代对象吗,好像满足map的使用方法诶



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-24 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表