《Python 3 基础》- numpy的array,python的list、tuple的区别与联系再辨析

这里写自定义目录标题

    • 一、基本认识
    • 二、list与传统数组(以C++为例)的联系与区别
    • 三、1维list切片规则
    • 四、2维list类似于2维数组,但表达方式需适应
    • 五、list与元组的联系与区别
      • 1. tuple的创建方法类似于list,tuple用()表示
      • 2. tuple增加元素的方法

一、基本认识

  1. Python本身没用传统意义上的数组,但暂可把list看作数组(数组每个元素类型可以是任意的,不需要是同一类型),但是,也牺牲了数组的高效性

  2. 需要利用传统数组的高效性,可在Python中import numpy的array

接下来从操作层面先认识一下list、tuple与传统数组的联系与区别

二、list与传统数组(以C++为例)的联系与区别

C++:
数组声明:typeName arrayName[arraySize]
如:float loans[20]
如果取元素,最基础的方法就是,按下标来操作,如:

float loans1=loan[0] #提取first alement

认识:与list容易混淆的是都用[ ],也是联系之处,但是大部分语言基础的数组都不支持动态增加元素,C++实现动态数组,可借助一些技术方法。

Python的list:
Python中列表(list)是一种有序、可变且可重复元素集合。
在list中的数据类型保存的是数据的存放的地址,简单的说就是指针,并非数据,这样保存一个list就太麻烦了,例如list1=[1,2,3,‘a’]需要4个指针和四个数据(引自:https://www.php.cn/faq/424062.html)
(其它可参考:https://blog.csdn.net/www_djh/article/details/134645540?spm=1001.2014.3001.5502)
牺牲了效率,增加了灵活性:
以下是关于Python列表的常见基本操作示例

list示例:

>>> stus=['x','=',2,y]   #不需声明,直接赋值
Traceback (most recent call last):File "<pyshell#0>", line 1, in <module>stus=['x','=',2,y]
NameError: name 'y' is not defined
>>> y=1
>>> stus=['x','=',2,y]
>>> 

通过下标(index)取元素:

>>> y=1
>>> stus=['x','=',2,y]
>>> stus[0]
'x'
>>> stus[-1]
1
>>> 

查看某元素值在list的个数

>>> stus.count(2)#因为直接输入元素本身,当本身是数值时,有时很难理解
1                #返回2这个元素出现了一次     
>>> 

查看某元素的index,若有多个仅返回第一个index

>>> stus.index(2) #元素2的index
3
>>> 

在末端增加一个元素

>>> stus.append(10)   #append每次只增加一个元素
>>> stus
['x', '=', 2, 1, 10]
>>> 
>>> stus.append([11,12,13])
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13]]
>>> 

也可添加元组、集合等

>>> stus.append((11,12,13))
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> stus.append({11,12,13})
>>> stus
['x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13), {11, 12, 13}]
>>> 

也可在指定下标处插入新值:

>>> stus.insert(0,3)
>>> stus
[3, 'x', '=', 2, 1, 10, [11, 12, 13], (11, 12, 13), {11, 12, 13}]
>>> 

如果待插入的位置:正下标超出范围,则插在末端;负下标超出范围,则在最开始添加

删除最后一个元素:stus.pop()并返回被删除的元素

>>> stus.pop()
{11, 12, 13}
>>> 
>>> stus.pop(1) #输入待删元素的index
'x'
>>> 

用remove(元素),无返回

>>> stus
[3, '=', 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> stus.remove(=)
SyntaxError: invalid syntax
>>> stus.remove("=")
>>> stus
[3, 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> 

用python 关键词(命令)del 删除某index的元素

>>> stus
[3, 2, 1, 10, [11, 12, 13], (11, 12, 13)]
>>> del stus[6]
Traceback (most recent call last):File "<pyshell#26>", line 1, in <module>del stus[6]
IndexError: list assignment index out of range
>>> del stus[5]
>>> stus
[3, 2, 1, 10, [11, 12, 13]]
>>> 

其它:

>>> stus.sort()  #该list元素类型不支持排序
Traceback (most recent call last):File "<pyshell#30>", line 1, in <module>stus.sort()
TypeError: '<' not supported between instances of 'list' and 'int'
>>> 

倒序

>>> stus.reverse()
>>> stus
[[11, 12, 13], 10, 3, 2, 1]
>>> 

清空

stus.clear()

三、1维list切片规则

如:>>> A
[‘a’, ‘b’, ‘a’, 60, 20]
则:A[::] 格式是 start_index:end_index:step
切片结果:包含 start_index元素,不包含end_index元素
因为step缺省为1,往往被省略所以常见A[:]
如: A[:] 取全list
A[:2] 从index=0取到index<2的元素
A[2:] 从index=2取到末尾

这个东东初学容易与字典混在一起:字典是包括在一对{ }内的
如:dict = {‘Alice’: ‘2341’, ‘Beth’: ‘9102’, ‘Cecil’: ‘3258’}

>>> dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
>>> dict['Alice']  #也容易与在dataframe中的使用搞混,好难啊
'2341'
>>> 

四、2维list类似于2维数组,但表达方式需适应

C++:
二维数组声明:typeName arrayName[rowSize][columnSize]
如:float loans[2][2]
而二维的list:
stuts_sheet=[[‘a’,‘b’],[60,20]]
取元素:

>>> stuts_sheet[0][0]
'a'
>>> 

取行:

>>> stuts_sheet[0]
['a', 'b']
>>> 

好像只能用代码实现取列,而且,list每行元素可以不一样长
如:

>>> stuts_sheet[0].append('a')
>>> stuts_sheet
[['a', 'b', 'a'], [60, 20]]
>>> 

extend可以把两个list合并

>>> A=stuts_sheet[0]
>>> B=stuts_sheet[1]
>>> A.extend(b)
Traceback (most recent call last):File "<pyshell#42>", line 1, in <module>A.extend(b)
NameError: name 'b' is not defined
>>> A.extend(B)
>>> A
['a', 'b', 'a', 60, 20]
>>> 

五、list与元组的联系与区别

tuple一旦创建,它就不能改变了,也就是说它也没有 append(),insert() 这样的方法,但它也有获取某个索引值的方法,但是不能赋值。那么为什么要有 tuple 呢?那是因为 tuple 是不可变的,所以代码更安全。函数经常返回tuple。

1. tuple的创建方法类似于list,tuple用()表示

>>> tup=('aly',x)
>>> tup[1]
2
>>> x=[3]    
>>> tup[1]   #没修改成功
2
>>> 

2. tuple增加元素的方法

list可以用自己的append()来添加元素。
Python元组是一种不可变的有序集合。
方法一:
在Python中,元组和字符串一样,支持“+”、“+=”运算符进行拼接操作。因此,可以通过将一个元组与一个元素的元组相加.

>>> t=(1,)
>>> t1=(a,b)
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>t1=(a,b)
NameError: name 'a' is not defined
>>> t1=('a','b')
>>> t2=t1+t
>>> t2
('a', 'b', 1)
>>> 

方法二:
先转成list利用list的append增加元素,再转回tuple

>>> t2
('a', 'b', 1)
>>> list1=list(t2)
>>> list1.append(5)
>>> t3=tuple(list1)
>>> t3
('a', 'b', 1, 5)
>>> 

方法三:
使用元组解包,这个方法的特点:可以把元组元素设成某个变量,添加进元组

>>> t3
('a', 'b', 1, 5)
>>> var=10
>>> t4=(*t3,var)
>>> t4
('a', 'b', 1, 5, 10)
>>> 

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

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

相关文章

白码CRM快速实现报价转订单功能

某crm项目已经做到销售模块了&#xff0c;销售模块实现了从报价到销售单&#xff0c;再到财务模块的应收流程。但使用过程中发现不好用的地方&#xff1a;报价通过后客户下单&#xff0c;销售相关人员又要重新录入数据一样的销售单&#xff0c;觉得这样的操作比较繁琐&#xff…

【STM32】HAL库的STOP低功耗模式UART串口唤醒,第一个接收字节出错的问题(已解决)

【STM32】HAL库的STOP低功耗模式UART串口唤醒&#xff0c;第一个接收字节出错的问题&#xff08;已解决&#xff09; 文章目录 BUG复现调试代码推测原因及改进方案尝试中断时钟供电外设唤醒方式校验码硬件问题 切换到STOP0模式尝试结论和猜想解决方案附录&#xff1a;Cortex-M…

【leetcode100-035】【链表/哈希链表】LRU缓存

【题干】 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;…

说清楚Kubernetes、Docker、Dockershim、Containerd、runC、CRI、OCI的关系

Kubernetes v1.20版本 的 release note 里说 deprecated docker。并且在后续版本 v1.24 正式删除了 dockershim 组件&#xff0c;这对我们有什么影响呢&#xff1f;Kubernetes 1.20: The Raddest Release | Kubernetes 为了搞明白这件事情&#xff0c;以及理解一系列容器名词 …

仿真机器人-深度学习CV和激光雷达感知(项目2)day01【项目介绍与环境搭建】

文章目录 前言项目介绍功能与技术简介硬件要求环境配置虚拟机运行项目demo 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;本文内容是我为复试准备的第二个项目 &#x1f4ab;欢迎大家的关注&#xff0c;我的博客主要关注…

03.neuvector之组的划分逻辑

neuvector之组的划分逻辑 原文链接,欢迎大家关注我的github账号 一、组的定义 NeuVector 会自动从正在运行的应用程序中创建组。这些组以前缀‘nv‘开头。您也可以使用 CRD 或 REST API 手动添加它们&#xff0c;并且可以在任何模式下创建、发现、监视或保护。网络和响应规则需…

Java language programming:List的使用

&#xff08;源于PTA&#xff09; 题目&#xff1a; <1>.定义Person类。 <2>.定义私有属性String name,int age,使用Eclipse生成每个属性setter 、getter&#xff0c;有参Person(String name,int age) 、无参构造方法&#xff0c;toString方法。 <3>.定义Mai…

现阶段Python和Java哪个更吃香?

现阶段Python和Java哪个更吃香&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「Java的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&…

论文阅读 Vision Transformer - VIT

文章目录 1 摘要1.1 核心 2 模型架构2.1 概览2.2 对应CV的特定修改和相关理解 3 代码4 总结 1 摘要 1.1 核心 通过将图像切成patch线形层编码成token特征编码的方法&#xff0c;用transformer的encoder来做图像分类 2 模型架构 2.1 概览 2.2 对应CV的特定修改和相关理解 解…

一个小程序跳转到另一个小程序中如何实现

小程序 保证两个小程序是一样的主体才可以跳转。怎么知道是不是同样的主体呢&#xff1f; 小程序的后台管理-设置-基本设置-基本信息。查看主体信息。 跳转 <button clicktoOtherMini()>跳转到另一个小程序</button> function toOtherMini(){wx.navigateToMini…

GPT实战系列-简单聊聊LangChain搭建本地知识库准备

GPT实战系列-简单聊聊LangChain搭建本地知识库准备 LangChain 是一个开发由语言模型驱动的应用程序的框架&#xff0c;除了和应用程序通过 API 调用&#xff0c; 还会&#xff1a; 数据感知 : 将语言模型连接到其他数据源 具有代理性质 : 允许语言模型与其环境交互 LLM大模型…

python中的overload

Python中的overload 类似函数重载方法第一种第二种 类似函数重载方法 参考链接&#xff1a;Python中重写&#xff08;override&#xff09; 第一种 结起来&#xff0c;在Python中可以使用重写&#xff08;override&#xff09;来重新定义父类中的方法&#xff0c;但并不存在…

smartgit选择30天试用后需要输入可执行文件

突然有一天smartgit提示到期了&#xff0c;我按照以往那样删除license和preferences文件后&#xff0c;选择30天试用&#xff0c;弹出了需要选择git可执行文件。 我尝试选择了我的git.exe&#xff0c;发现根本不行&#xff0c;提示让我执行下git --version 执行过后提示我的.gi…

数据结构及其简单实现

栈 先进后出栈顶操作&#xff08;栈顶进&#xff0c;栈顶出&#xff09; class Strock {constructor() {this.data [] // 可以是对象this.count 0}push(item) {// 实现有三种// 1. this.data.push(item); // 2. this.data[this.data.length] item; this.count// 3this.dat…

CentOS 7 权限管理实战指南:用户组管理相关命令详解

前言 深入了解 CentOS 7 用户组管理的命令&#xff0c;掌握关键的用户组操作技巧。从创建和删除用户组、修改组属性&#xff0c;到设置组密码和管理组成员&#xff0c;这篇文章详细介绍了 CentOS 7 系统下常用的用户组管理命令&#xff0c;为读者小伙伴提供了实用而全面的指南…

Python武器库开发-武器库篇之Whois信息收集模块化(四十五)

Python武器库开发-武器库篇之Whois信息收集模块化(四十五) 我们在进行渗透的时候&#xff0c;需要进行全面的信息收集&#xff0c;除了主动信息收集之外&#xff0c;我们还经常会进行被动信息收集&#xff0c;Whois信息收集就是其中的一种,我们可以利用一些网站进行Whois信息收…

【LabVIEW FPGA入门】没有CompactRIO时进行编程测试

1.新建一个空白项目。 2.新建cRIO终端。 要添加仿真的远程实时目标&#xff0c;请选择项目名称&#xff0c;右击并选择新建>>目标和设备(Targets and Devices)。 3.新建终端和设备&#xff0c;选一个cRIO型号 接下来&#xff0c;当添加目标和设备窗口出现时&#xff0c;请…

虚拟ip可以解决所有的安全问题吗

虚拟IP&#xff08;Virtual IP&#xff09;是一种网络技术&#xff0c;可以把多台物理服务器或设备组合成一个逻辑集群&#xff0c;并且使用同一个IP地址对外提供服务。虚拟IP具有负载均衡、故障切换和高可用性等优势&#xff0c;同时还可以作为一种安全措施来增加系统的抗攻击…

[足式机器人]Part2 Dr. CAN学习笔记-Advanced控制理论 Ch04-12+13 不变性原理+非线性系统稳定设计

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-Advanced控制理论 Ch04-1213 不变性原理非线性系统稳定设计 1. Invariance Princilpe-LaSalle;s Theorem不变性原理2. Nonlinear Basic Feedback Stabilization 非线性系统稳定设计 1. Invarianc…

springCloud使用apache的http类和RestTemplate以及Eureka

使用apache的&#xff1a; package com.csgholding.pvgpsp.eqp.util;import com.esotericsoftware.minlog.Log; import org.apache.commons.collections4.MapUtils; import org.apache.http.HttpEntity; import org.apache.http.client.config.RequestConfig; import org.apac…