python3中,二维列表(矩阵)按列求和求最大值二维列表转置的一些操作,不使用numpy库。在LeetCode做题时比较常用。

太长不看版本

# 用于演示的二维列表
>>>a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 按行求最大值
>>> list(map(max, a))
[3, 6, 9]# 按行求和
>>> list(map(sum, a))
[6, 15, 24]# 按列求最大值
>>> list(map(max, *a))
[7, 8, 9]# 按列求和
>>> list(map(sum, zip(*a)))
[12, 15, 18]# 转置二维列表
>>> [list(col) for col in zip(*a)]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]

详细介绍

按行计算

在python里,按行求和、求最大值很方便,直接for循环或者直接map函数都可以

>>>a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 按行求最大值
>>>list(map(max, a))
[3, 6, 9]# 按行求和
>>>list(map(sum, a))
[6, 15, 24]

按列计算

但是如果要按列求和、按列求最大值,则需要转换一下

先看按列求最大值

>>>a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 按列求最大值
>>>list(map(max, *a))
[7, 8, 9]

原理

map函数作用的时候需要两个参数,第一个是函数,第二个是操作对象

操作对象只有一个的时候:map会依次把函数应用在操作对象的子元素里

操作对象大于一个的时候:map会把每个对象的子元素一起作用(即按列操作)

而  *a  把二维列表a拆开传递给map,map一共拿到3个操作对象,[1, 2, 3], [4, 5, 6], [7, 8, 9],就会按列操作了。此处  *a  和  [1, 2, 3], [4, 5, 6], [7, 8, 9] 外面不加中括号是一样的

>>> list(map(max, [[1,2,3],[4,5,6],[7,8,9]]))
[3, 6, 9]>>> list(map(max, [1,2,3],[4,5,6],[7,8,9]))  # 二维数组拆开传入,和*a效果一样
[7, 8, 9]>>> list(map(max, *a))
[7, 8, 9]

但是按列求和不太一样,直接使用星号*会报错

>>> list(map(sum, a))
[6, 15, 24]
>>> list(map(sum, *a))
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: sum() takes at most 2 arguments (3 given)

因为需要 *a 传入了3个参数给sum,sum只能一起处理。即运行了 sum(1, 4, 7),而sum只能够这样运行 sum([1, 4, 7]),相当于这样:

>>> sum([1,2,3])
6
>>> sum(1,2,3)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: sum() takes at most 2 arguments (3 given)

所以不如先把二维列表转置一下,使用zip函数即可。然后再求和

>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]# 二维列表转置(转置后是一个包含3个元组的列表,也可以转成包含列表的列表)
>>> list(zip(*a))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]# 二维列表按列求和
>>> list(map(sum, zip(*a)))
[12, 15, 18]

python 二维列表按列求和,按列求最大值,转置,* 星号操作,简便方法,不使用numpy相关推荐

  1. python二维列表list赋值时整列重复赋值问题

    当我们使用如下方式创建一个二维列表时: l = [[0]*3]*3 如果尝试给其中一个元素赋值 l[0][1] = 1 会发现整个列表的第二列都被赋值了 这种情况的原因是创建列表时第2,3行其实是第一 ...

  2. Python 二维列表按多列排序 反向排序

    Python 二维列表按多列排序 (有多个元素需要排序 代码 代码 两种方法均可 raw_list = [[6,2,'c'],[4,5,'b'],[7,8,'a']]sorted_list = sor ...

  3. python 二维列表_python二维列表

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:使用 lambda 关键词辅助对二维列表进行排序,lambda的使用方法 ...

  4. Python二维列表赋值问题

    Python二维列表的赋值问题 使用该方法建立的二维列表,对a[0][0]进行赋值1,结果第一列全部被赋值为1: >>> a = [[0]*5]*5 >>> a [ ...

  5. python二维列表

    python二维列表 1. 本质 2. 创建二维列表 3. "读" 二维列表 4. "写" 二维列表 5. 遍历二维列表 6. 练习1 7. 练习2 1. 本质 ...

  6. 案例演示Python二维列表与Java二维数组

    1.Python二维列表案例演示 运行程序,结果如下: 2.案例演示Java二维数组 package net.hw.test;/*** 功能:二维数组用法示例* 作者:华卫* 日期:2013年12月1 ...

  7. Python 二维列表

    二维列表 一.概念 二.创建二维列表 1.追加一维列标来生成二维列标 2.直接赋值生成二维列表 三.一维列标与二维列表的转换 1.一维列表转换成二维列表 2.二维列表转换成一维列表 3.利用NumPy ...

  8. Python二维列表转换为一维列表

    Python二维列表转换为一维列表 Python二维数组转换为一维数组 二维转一维 # 第一种写法 拆解的写法a = [] ab = [[1,2,3], [5,8], [7,8,9]] for ite ...

  9. Python 二维列表操作

    Python 二维列表操作 创建二维列表对象 初始化一个2*3尺寸大小的全零二维列表 获取二维列表行元素的个数 获取二维列表总元素个数 今天介绍一下 Python中二维列表的一些操作. 创建二维列表对 ...

  10. python二维列表转置

    python 二维列表转置 def transpose(self, matrix):new_matrix = []for i in range(len(matrix[0])):matrix1 = [] ...

最新文章

  1. 小程序门店自提功能开启,酷客多带你玩转O2O模式
  2. VsCode中文乱码解决方法
  3. 9.0 C++远征:对象成员
  4. python单行箭头_在Python中,如何让箭头尖在指定的坐标处开始/结束?
  5. drupalchina--如何翻译及如何上传翻译的内容?
  6. 专有网络 VPC > 快速入门 > 网络规划
  7. a标签不可点击_如何在Notion中做多级标签?-Notion102
  8. SQL数据库的多表查询
  9. Java中的代理模式--静态代理和动态代理
  10. 基于离线策略的强化学习(PPO)
  11. python wifi密码本下载_WifiPass下载 WifiPass(Python获取本机保存的所有WIFI密码) 免费版 下载-脚本之家...
  12. 美容院管理系统高效管理门店店务?
  13. AI:人工智能领域之AI的发展历史图集合、AI发展思维导图之详细攻略
  14. 练习愤怒的小鸟(抽象类、多态、重写)
  15. pandas学习笔记-DataFrame(2)
  16. matlab中设x=zsin3x,三阶偏导数设e的sin(2x+3y)次方,求Z的三阶偏导数是多少?
  17. Windflowers(歌词)
  18. 哔哩哔哩2020校园招聘算法笔试卷(二)
  19. Python爬虫——爬取股票信息生成csv文件
  20. KPM字符串匹配next矩阵计算

热门文章

  1. python 查询mysql数据导出excl_python查询mysql并生成excel表
  2. linux创建周期计划任务,windows创建任务计划(周期执行bat脚本)
  3. adobe premiere做平衡分屏、不等距分屏、多角度效果
  4. 实习僧——数据分析岗招聘信息分析 源代码
  5. JavaWeb实现好友验证的思路
  6. 灰狼优化算法(Grey Wolf Optimizer,GWO)
  7. python实现十以内随机数的加减乘除
  8. python:二进制序列类型 --- bytes, bytearray
  9. 详述CRC校验码(附代码)
  10. DIV VGA HDMI