python 二维列表按列求和,按列求最大值,转置,* 星号操作,简便方法,不使用numpy
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相关推荐
- python二维列表list赋值时整列重复赋值问题
当我们使用如下方式创建一个二维列表时: l = [[0]*3]*3 如果尝试给其中一个元素赋值 l[0][1] = 1 会发现整个列表的第二列都被赋值了 这种情况的原因是创建列表时第2,3行其实是第一 ...
- Python 二维列表按多列排序 反向排序
Python 二维列表按多列排序 (有多个元素需要排序 代码 代码 两种方法均可 raw_list = [[6,2,'c'],[4,5,'b'],[7,8,'a']]sorted_list = sor ...
- python 二维列表_python二维列表
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 方法一:使用 lambda 关键词辅助对二维列表进行排序,lambda的使用方法 ...
- Python二维列表赋值问题
Python二维列表的赋值问题 使用该方法建立的二维列表,对a[0][0]进行赋值1,结果第一列全部被赋值为1: >>> a = [[0]*5]*5 >>> a [ ...
- python二维列表
python二维列表 1. 本质 2. 创建二维列表 3. "读" 二维列表 4. "写" 二维列表 5. 遍历二维列表 6. 练习1 7. 练习2 1. 本质 ...
- 案例演示Python二维列表与Java二维数组
1.Python二维列表案例演示 运行程序,结果如下: 2.案例演示Java二维数组 package net.hw.test;/*** 功能:二维数组用法示例* 作者:华卫* 日期:2013年12月1 ...
- Python 二维列表
二维列表 一.概念 二.创建二维列表 1.追加一维列标来生成二维列标 2.直接赋值生成二维列表 三.一维列标与二维列表的转换 1.一维列表转换成二维列表 2.二维列表转换成一维列表 3.利用NumPy ...
- Python二维列表转换为一维列表
Python二维列表转换为一维列表 Python二维数组转换为一维数组 二维转一维 # 第一种写法 拆解的写法a = [] ab = [[1,2,3], [5,8], [7,8,9]] for ite ...
- Python 二维列表操作
Python 二维列表操作 创建二维列表对象 初始化一个2*3尺寸大小的全零二维列表 获取二维列表行元素的个数 获取二维列表总元素个数 今天介绍一下 Python中二维列表的一些操作. 创建二维列表对 ...
- python二维列表转置
python 二维列表转置 def transpose(self, matrix):new_matrix = []for i in range(len(matrix[0])):matrix1 = [] ...
最新文章
- 小程序门店自提功能开启,酷客多带你玩转O2O模式
- VsCode中文乱码解决方法
- 9.0 C++远征:对象成员
- python单行箭头_在Python中,如何让箭头尖在指定的坐标处开始/结束?
- drupalchina--如何翻译及如何上传翻译的内容?
- 专有网络 VPC > 快速入门 > 网络规划
- a标签不可点击_如何在Notion中做多级标签?-Notion102
- SQL数据库的多表查询
- Java中的代理模式--静态代理和动态代理
- 基于离线策略的强化学习(PPO)
- python wifi密码本下载_WifiPass下载 WifiPass(Python获取本机保存的所有WIFI密码) 免费版 下载-脚本之家...
- 美容院管理系统高效管理门店店务?
- AI:人工智能领域之AI的发展历史图集合、AI发展思维导图之详细攻略
- 练习愤怒的小鸟(抽象类、多态、重写)
- pandas学习笔记-DataFrame(2)
- matlab中设x=zsin3x,三阶偏导数设e的sin(2x+3y)次方,求Z的三阶偏导数是多少?
- Windflowers(歌词)
- 哔哩哔哩2020校园招聘算法笔试卷(二)
- Python爬虫——爬取股票信息生成csv文件
- KPM字符串匹配next矩阵计算