python数组列表操作简记二

python数组列表操作简记二

  • 一、列表配对组合为新列表或字典
    • 1.1多个列表配对组合为新列表
    • 1.2两个列表配对转换为字典
  • 二、数组加减乘除运算
    • 2.1一维数组加减除运算
    • 2.2一维数组乘法运算
  • 三、数组切片读取
    • 3.1一维数组切片读取
    • 3.2二维数组切片读取
    • 3.3三维数组切片读取
  • 四、数组简单筛选
    • 4.1筛选数组中满足指定条件的元素
    • 4.2筛选数组中最大最小元素及索引
  • 五、数组其他操作
    • 5.1数组元素进行约分
    • 5.2数组复制
  • 参考文档

一、列表配对组合为新列表或字典

1.1多个列表配对组合为新列表

使用python的内置zip函数可将多个列表配对组合为一个新的列表,新列表中元素为原列表同一位置的元素组成的tuple类型元素,但zip函数并不直接返回列表变量,而是返回迭代器,可对其进行迭代读取,也可转换为列表变量。
示例代码如下:

lt01 = [1, 2, 3, 4]
lt02 = ['a', 'b', 'c', 'd']
lt03 = [5, 6, 7, 8]
for item in zip(lt01, lt02, lt03):print(item)print(item[0])print(item[1])print(item[2])lt04 = list(zip(lt01, lt02, lt03))

zip对拆分组合的列表长度不要求一致,当列表长度不一致时匹配到最短长度的列表的最后一个元素,其他列表的元素会被忽略掉。

组合成的新列表也可通过zip逆操作得到原始列表,示例代码如下:

lt05, lt06, lt07 = zip(*lt04)

1.2两个列表配对转换为字典

zip函数可将两个列表配对转换为字典变量,第一个列表的元素作为键,第二个列表的元素作为对应的值,示例代码如下:

lt01 = [1, 2, 3, 4]
lt02 = ['a', 'b', 'c', 'd']
dict01 = dict(zip(lt01, lt02))

当两个列表长度不一致时,以较短长度的列表为准,此外对于第一个列表如果有重复的元素,那么该元素对应的键值会被后一个键值覆盖掉

二、数组加减乘除运算

numpy定义的一维数组为例,进行加减乘除运算。

2.1一维数组加减除运算

一维数组加减运算,既可以是加减一个常数,也可以是一维数组间相同位置元素进行加减,示例代码如下:

import numpy as npa01 = np.array([1, 2, 3, 4])
a02 = np.array([0, 1, 2, 3])
a03 = a01 + 1
a03 = np.add(a01, 1)#与上行代码效果相同
a04 = a01 - 1
a04 = np.subtract(a01, 1)#与上行代码效果相同
a05 = a01 + a02
a05 = np.add(a01, a02)#与上行代码效果相同
a06 = a01 - a02
a06 = np.subtract(a01, a02)#与上行代码效果相同

一维数组除法运算,既可以是除上一个常数,也可以是一维数组间相同位置元素进行除法,示例代码如下:

import numpy as npa01 = np.array([4, 5, 6, 7])
a02 = np.array([1, 2, 3, 4])
a03 = a01 / 2
a03 = np.divide(a01, 2)#与上行代码效果相同
a04 = a01 // 2#得到除以2的整数部分,相当于除以2后再进行int类型强转换
a04 = a01 % 2#对2取余数
a05 = a01 / a02
a05 = np.divide(a01, a02)#与上行代码效果相同
a06 = a01 // a02
a06 = a01 % a02

2.2一维数组乘法运算

一维数组可认作向量,向量的乘法常见的有4种,分别为相同位置元素相乘、点积、叉积、外积,示例代码如下:

import numpy as npa01 = np.array([1, 2, 3, 4])
a02 = np.array([0, 1, 2, 3])
a03 = a01 * 2
a03 = np.multiply(a01, 2)#与上行代码效果相同
a03 = a01 ** 2#2次方运算
a04 = a01 * a02#相同位置元素相乘
a04 = np.multiply(a01, a02)#与上行代码效果相同
a05 = a01.dot(a02)#点积,结果为数值,运算过程与数学上的数量积运算一致
a05 = a02.dot(a01)#与上行代码结果相同
a05 = np.dot(a01, a02)#与上行代码结果相同a06 = np.outer(a01, a02)#外积,结果为使用a01中的每个元素乘以a02向量,最终得到一个4×4的矩阵a01 = np.array([1, 2, 3])
a02 = np.array([0, 1, 2])
a07 = np.cross(a01, a02)#叉积,叉积运算只能用于二维向量或三维向量,二维向量的叉积结果为数值,三维叉积结果为向量,运算过程与数学上的向量积运算一致

三、数组切片读取

numpy定义的数组为例。

3.1一维数组切片读取

一维数组切片读取方式,与列表读取方式一致,示例代码如下:

import numpy as npa01 = np.array([1,2,3,4,5,6])
a02 = a01[1:6]
a02 = a01[:-1]
a02 = a01[1:]
a02 = a01[1:6:2]#获取索引为1到5的元素,步长为2
a02 = a01[::2]#获取奇数组
a02 = a01[1::2]#获取偶数组

3.2二维数组切片读取

二维数组可认作矩阵,示例代码如下:

import numpy as npa01 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#维度为3×4,输出如下
array([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])a02 = a01[1]#取矩阵第二行,输出如下
array([5, 6, 7, 8])a02 = a01[1,:]#取矩阵第二行,输出如下
array([5, 6, 7, 8])a02 = a01[0:2]#取矩阵第一、二行,输出如下
array([[1, 2, 3, 4],[5, 6, 7, 8]])a02 = a01[0:2,:]#取矩阵第一、二行,输出如下
array([[1, 2, 3, 4],[5, 6, 7, 8]])a03 = a01[:,0]#取矩阵第一列,输出如下
array([1, 5, 9])a03 = a01[:,0:2]#取矩阵第一、二列,输出如下
array([[ 1,  2],[ 5,  6],[ 9, 10]])a04 = a01[1,1:]#取矩阵第二行的第二个列元素至最后一个列元素,返回一维数组,输出如下
array([6, 7, 8])a04 = a01[1:,1]#取矩阵第二列的第二个行元素至最后一个行元素,返回一维数组,输出如下
array([ 6, 10])a04 = a01[1:,1:]#取矩阵第二行、第二列开始至最后一个行列元素,返回二维数组,输出如下
array([[ 6,  7,  8],[10, 11, 12]])a04 = a01[0::2,1::2]#取矩阵第一行、第二列开始至最后一个行列元素,步长为2,返回二维数组,输出如下
array([[ 2,  4],[10, 12]])

二维数组的读取可以简单概括为通过行索引,列索引指定,行索引与列索引之间用逗号隔开,行列索引语法规则与一维数组及列表读取的语法一致。

3.3三维数组切片读取

三维数组切片读取与二维数组切片读取类似,可以简单概括为通过第一维索引,第二维索引,第三维索引指定,索引之间用逗号隔开。示例代码如下:

import numpy as npa01 = np.array([[[1,2,3,4],[5,6,7,8],[9,10,11,12]], [[10,20,30,40],[50,60,70,80],[90,100,110,120]]])#维度为2×3×4,输出如下
array([[[  1,   2,   3,   4],[  5,   6,   7,   8],[  9,  10,  11,  12]],[[ 10,  20,  30,  40],[ 50,  60,  70,  80],[ 90, 100, 110, 120]]])a02 = a01[0]#输出如下
array([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])a02 = a01[:,0,:]#输出如下
array([[ 1,  2,  3,  4],[10, 20, 30, 40]])a02 = a01[:,:,0]#输出如下
array([[ 1,  5,  9],[10, 50, 90]])a02 = a01[:,0:2,1:3]#输出如下
array([[[ 2,  3],[ 6,  7]],[[20, 30],[60, 70]]])a02 = a01[1:,0:2,0:3:2]#输出如下
array([[[10, 30],[50, 70]]])

三维数组切片读取时,要注意读取出来的数组维度,并不容易直观判断出来。

四、数组简单筛选

numpy定义的数组为例。

4.1筛选数组中满足指定条件的元素

示例代码如下:

import numpy as npa01 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#维度为3×4,输出如下
array([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])a02 = a01[a01 > 6]#筛选出数组中大于6的元素,输出如下
array([ 7,  8,  9, 10, 11, 12])a03 = a01 > 6#输出如下
array([[False, False, False, False],[False, False,  True,  True],[ True,  True,  True,  True]])a04 = a01[a03]#结果与a01[a01>6]相同,输出如下
array([ 7,  8,  9, 10, 11, 12])a03 = (a01 > 6) & (a01 < 10)#输出如下
array([[False, False, False, False],[False, False,  True,  True],[ True, False, False, False]])a04 = a01[a03]#筛选出数组中大于6小于10的元素,输出如下
array([7, 8, 9])

4.2筛选数组中最大最小元素及索引

示例代码如下:

import numpy as npa01 = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])#维度为3×4,输出如下
array([[ 1,  2,  3,  4],[ 5,  6,  7,  8],[ 9, 10, 11, 12]])min_a01 = np.min(a01)#获取数组中最小元素,输出如下
1index01 = np.argmin(a01)#获取数组中最小元素的索引,索引为数组展平为一维数组后的索引,输出如下
0max_a01 = np.max(a01)#获取数组中最大元素,输出如下
12index02 = np.argmax(a01)#获取数组中最大元素的索引,索引为数组展平为一维数组后的索引,输出如下
11min_a01_column = np.min(a01, 0)#获取数组中每一列最小元素,返回数组,输出如下
array([1, 2, 3, 4])a02 = np.argmin(a01, 0)#获取数组中每一列最小元素的索引,返回数组,输出如下
array([0, 0, 0, 0], dtype=int64)min_a01_row = np.min(a01, 1)#获取数组中每一行最小元素,返回数组,输出如下
array([1, 5, 9])a02 = np.argmin(a01, 1)#获取数组中每一行最小元素的索引,返回数组,输出如下
array([0, 0, 0], dtype=int64)max_a01_column = np.max(a01, 0)#获取数组中每一列最大元素,返回数组,输出如下
array([ 9, 10, 11, 12])a03 = np.argmax(a01, 0)#获取数组中每一列最大元素的索引,返回数组,输出如下
array([2, 2, 2, 2], dtype=int64)max_a01_row = np.max(a01, 1)#获取数组中每一行最大元素,返回数组,输出如下
array([ 4,  8, 12])a03 = np.argmax(a01, 1)#获取数组中每一行最大元素的索引,返回数组,输出如下
array([3, 3, 3], dtype=int64)

使用上述代码获取数组最大最小元素及索引时,如果数组中存在nan值,会将nan值作为最大和最小元素,如果想要忽略nan值,可以使用nanargmin、nanmin、nanargmax、nanmax函数

五、数组其他操作

numpy定义的数组为例。

5.1数组元素进行约分

示例代码如下:

import numpy as npa01 = np.array([[1.4,2.5,3.5,4.6],[5.44,6.45,7.55,8.46]])#维度为2×4,输出如下
array([[1.4 , 2.5 , 3.5 , 4.6 ],[5.44, 6.45, 7.55, 8.46]])a02 = np.round(a01, 1)#保留一位小数进行约分,输出如下
array([[1.4, 2.5, 3.5, 4.6],[5.4, 6.4, 7.6, 8.5]])a02 = np.round(a01, 0)#保留整数位进行约分,输出如下
array([[1., 2., 4., 5.],[5., 6., 8., 8.]])

从上述代码及执行结果可看出,numpy的round函数约分时满足四舍六入五看单双的规则,这一点与python的内置round函数不同,内置round函数在约分时会考虑到浮点数表示的精度问题,所以导致看上去可能不符合约分规则。想要看到浮点数的实际大小,可通过如下代码查看:

import decimalprint(decimal.Decimal(6.45))#输出如下
6.45000000000000017763568394002504646778106689453125print(decimal.Decimal(3.125))#输出如下
3.125

5.2数组复制

数组复制,示例代码如下:

import numpy as npa01 = np.array([1.4,2.5,3.5,4.6])#输出如下
array([1.4, 2.5, 3.5, 4.6])a02 = a01
a03 = np.copy(a01)a01[0] = 0#改变a01的第一个元素值后,a01、a02、a03分别如下
array([0. , 2.5, 3.5, 4.6])
array([0. , 2.5, 3.5, 4.6])
array([1.4, 2.5, 3.5, 4.6])a02[1] = 0#改变a02的第二个元素值后,a01、a02、a03分别如下
array([0. , 0. , 3.5, 4.6])
array([0. , 0. , 3.5, 4.6])
array([1.4, 2.5, 3.5, 4.6])a03[3] = 0#改变a03的第四个元素值后,a01、a02、a03分别如下
array([0. , 0. , 3.5, 4.6])
array([0. , 0. , 3.5, 4.6])
array([1.4, 2.5, 3.5, 0. ])

由上述代码可知,采用直接赋值的形式,新数组与原数组共享内存,改变数组内元素值后另一数组也会同步变化,使用copy函数,新数组与原数组互不影响,这一点与列表的复制相同

参考文档

Python: NumPy中的多维数组ndarray
细说NumPy数组的四种乘法,带你走进向量运算的奇妙世界
【Python之numpy库】12.np.round() 对数组/一堆数保留n位小数
python print设置输出宽度 python输出结果宽度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/52161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSL/TLS协议信息泄露漏洞修复

概述&#xff1a;CVE-2016-2183 是一个涉及 SSL/TLS 协议信息泄露的漏洞&#xff0c;也被称为 "SWEET32" 攻击。该漏洞利用了某些对称加密算法&#xff08;如 3DES&#xff09;的弱点&#xff0c;攻击者可以通过捕获和分析大量的加密流量&#xff0c;可能会恢复明文数…

Sqlite3数据库表内数据批量读取操作---sqlite3_stmt机制

0、引言 在前面两篇文章已经对数据环境搭建、数据批量写入库中进行了较为详细的讲解。因此&#xff0c;基于前两篇文章内容的基础上&#xff0c;本文主要从数据库中批量数据读取操作进行梳理讲解。 嵌入式数据库SQLite 3配置使用详细笔记教程_sqlite3-CSDN博客 SQLite 3 优化批…

【机器学习】4. 相似性比较(二值化数据)与相关度(correlation)

SMC Simple Matching Coefficient 评估两组二进制数组相似性的参数 SMC (f11 f00) / (f01f10f11f00) 其中&#xff0c;f11表示两组都为1的组合个数&#xff0c;f10表示第一组为1&#xff0c;第二组为0的组合个数。 这样做会有一个缺点&#xff0c;假设是比较稀疏的数据&…

<数据集>流水线纸箱识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;1395张 标注数量(xml文件个数)&#xff1a;1395 标注数量(txt文件个数)&#xff1a;1395 标注类别数&#xff1a;2 标注类别名称&#xff1a;[GreenCarton,RedCarton] 序号类别名称图片数框数1GreenBox131728482R…

解析XML格式数据

解析XML格式数据主要涉及到将XML文档转换为程序可以处理的数据结构&#xff0c;这通常通过使用特定的解析技术来实现。在Java中&#xff0c;解析XML数据主要有四种方法&#xff0c;分别是DOM&#xff08;Document Object Model&#xff09;、SAX&#xff08;Simple API for XML…

力扣 | 最长公共子序列 | 动态规划 | 最长公共子序列长度、最长公共子序列

文章目录 一、1143. 最长公共子序列二、求最长公共子序列三、变式一、1035. 不相交的线二、1312. 让字符串成为回文串的最少插入次数 一、1143. 最长公共子序列 LeetCode&#xff1a;1143. 最长公共子序列 这是一道典型的二维动态规划问题&#xff0c;甚至面试都能被面到。 这…

下载文件设置响应头

参考链接&#xff1a;关于URL编码 1、概述 一般要对文件名称编码&#xff08;主要是中文名称和特殊符号编码的问题&#xff09;&#xff0c;不然下载的时候会出异常&#xff0c;异常在后面 package com.mocha.order.util;import com.mocha.order.constant.BrowserConstant; …

【15】bat脚本备份windows的部署文件

1、请安装D:\7-Zip\7z.exe压缩工具,sshfs工具 2、通过挂载远程服务器存储文件夹,将部署文件压缩到指定备份路径 3、指定备份路径只保存20个文件,超过定期删除多余的 4、部署文件备份完成后,卸载远程存储文件夹 @echo off setlocal:: 备份web、mysql、redis、nginx :: folde…

Linux buffer/cache

清除方法 echo 1 > /proc/sys/vm/drop_caches # 仅清除页面缓存 echo 2 > /proc/sys/vm/drop_caches # 清除目录项和inode echo 3 > /proc/sys/vm/drop_caches # 清除页面缓存、目录项以及inode 下面了解一下这几种都是什么,简单理解&#xff0c;目录项和inode&…

C#关于多线程的线程问题

using System.Text; ​ namespace 平时练习8._19day06 {internal class Program{static async Task Main(string[] args){Console.WriteLine(Thread.CurrentThread.ManagedThreadId );StringBuilder sb new StringBuilder();for (int i 0; i < 10000; i){sb.Append("…

坚持绿色发展的上海智算中心,稳步推进中

自今年年初正式封顶以来&#xff0c;云端股份上海智算中心在外墙及内部的建设进展顺利。这座智算中心地理位置优越&#xff0c;正逐步成为推动数字经济发展的重要力量。 位置优势 云端股份上海智算中心毗邻智慧岛数据产业园&#xff0c;是崇明区目前建设的唯一一座智算中心&am…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介&#xff1a; 多功能秒达开源工具箱源码&#xff0c;&#xff0c;可自部署且完全开源的中文工具箱&#xff0c;永远的自由软件&#xff0c;轻量级运行&#xff0c;全平台支持&#xff08;包括ARMv8&#xff09;&#xff0c;完全类似 GPT 的支持&#xff0c;与高效的 UI 高…

前端构建工具 webpack与vite对比

一、webpack构建原理 Webpack的构建过程大致为&#xff1a; 1.从入口文件开始分析依赖&#xff0c; 2.递归解析所有依赖模块&#xff0c;生成依赖图&#xff0c; 3.调用Loader转换文件内容&#xff0c; 4.打包所有模块输出优化后的静态资源 。 webpack工作特点&#xff1a; …

[JS]精选面试题-2

1.谈⼀谈你理解的函数式编程 函数式编程&#xff08;Functional Programming&#xff09;是一种编程范式&#xff0c;通过函数的组合实现程序的功能 核心特性 函数是第一等公民&#xff1a;在函数式编程中&#xff0c;函数不仅可以被调用&#xff0c;还可以像其他值&#xf…

简化登录流程,助力应用建立用户体系

随着智能手机和移动应用的普及&#xff0c;用户需要在不同的应用中注册和登录账号&#xff0c;传统的账号注册和登录流程需要用户输入用户名和密码&#xff0c;这不仅繁琐而且容易造成用户流失。 华为账号服务&#xff08;Account Kit&#xff09;提供简单、快速、安全的登录功…

一文5000字从0到1使用Jmeter实现轻量级的接口自动化测试

接口测试虽然作为版本的一环&#xff0c;但是也是有一套完整的体系&#xff0c;有接口的功能测试、性能测试、安全测试&#xff1b;同时&#xff0c;由于接口的特性&#xff0c;接口的自动化低成本高收益的&#xff0c;使用一些开源工具或一些轻量级的方法&#xff0c;在测试用…

怎么解决小程序的异步请求问题

解决小程序的异步请求问题通常涉及对异步操作的有效管理&#xff0c;以确保数据的正确加载和显示。在小程序中&#xff0c;最常见的异步操作包括网络请求、文件操作等。以下是一些解决小程序异步请求问题的方法&#xff1a; 使用Promise&#xff1a; 小程序中的wx.request接口…

【Kotlin设计模式】Kotlin实现工厂模式

前言 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;提供一个创建对象的接口&#xff0c;不暴露对象的创建过程。它将实例化对象的任务交给子类或具体实现&#xff0c;从而使得客户端代码与具体类解耦。 工厂模式主要分为以下三类&#xf…

图像处理之:Video Processing Subsystem(一)

免责声明&#xff1a; 本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下&#xff0c;作者不对因使用本文内容而导致的任何直接或间接损失承担责任&#xff0c;包括但不限于数据丢失、业务中断或其他经济…

ucharts图表滚动

背景&#xff1a; 使用ucharts绘制折线图&#xff0c;当数据项多的时候&#xff0c;横坐标显示的文字会重合&#xff0c;故想到滑动 项目代码使用的是原生的代码&#xff0c;而非ucharts的组件&#xff1a; <template><view><canvas canvas-id"chartsLi…