<Python的列表和元组>——《Python》

news2024/11/18 2:57:54

目录

1.列表

1.1 列表的概念

1.2 创建列表 

1.3 访问下标

1.4 切片操作

1.5 遍历列表元素

1.6 新增元素

1.7 查找元素

1.8 删除元素

1.9 连接列表

2. 元组


1.列表

1.1 列表的概念

编程中, 经常需要使用变量, 来保存/表示数据.
如果代码中需要表示的数据个数比较少, 我们直接创建多个变量即可.
num1 = 10
num2 = 20
num3 = 30
......
但是有的时候, 代码中需要表示的数据特别多, 甚至也不知道要表示多少个数据. 这个时候, 就需要用到列表.
  • 列表是一种让程序猿在代码中批量表示/保存数据的方.
  • 元组和列表相比, 是非常相似的, 只是列表中放哪些元素可以修改调整, 元组中放的元素是创建元组的时候就设定好的, 不能修改调整.

1.2 创建列表 

  • 创建列表主要有两种方式. [ ] 表示一个空的列表

alist = [ ]
alist = list()
print(type(alist))

因为 list 本身是 Python 中的内建函数, 不宜再使用 list 作为变量名, 因此命名为 alist。

#创建列表
#1.直接使用字面值来创建
#   []就表示一个空的列表
a = []
print(type(a))

#2.使用list() 来创建
b = list()
print(type(b))

 

  • 如果需要往里面设置初始值, 可以直接写在 [ ] 当中.

可以直接使用 print 来打印 list 中的元素内容.

alist = [1, 2, 3, 4]
print(alist)

  • 列表中存放的元素允许是不同的类型. (这一点和 C++ Java 差别较大).
alist = [1, 'hello', True]
print(alist)

 

1.3 访问下标

  • 可以通过下标访问操作符 [ ] 来获取到列表中的任意元素.
我们把 [ ] 中填写的数字, 称为 下标 或者 索引 .
alist = [1, 2, 3, 4]
print(alist[2])
注意: 下标是从 0 开始计数的, 因此下标为 2 , 则对应着 3 这个元素.

  • 通过下标不仅能读取元素内容, 还能修改元素的值.
alist = [1, 2, 3, 4]
alist[2] = 100
print(alist)

  • 如果下标超出列表的有效范围, 会抛出异常.
alist = [1, 2, 3, 4]
print(alist[100])
  • 因为下标是从 0 开始的, 因此下标的有效范围是 [0, 列表长度 - 1]. 使用 len 函数可以获取到列表的元素个数.
alist = [1, 2, 3, 4]
print(len(alist))
  • 下标可以取负数. 表示 "倒数第几个元素"

 

#Python中的下标,其实还可以写成负数
#例如:-1 <==> len(a)-1
a = [1, 2, 3, 4]
print(a[len(a)-1])
print(a[-1])

 

 

alist = [1, 2, 3, 4]
print(alist[3])
print(alist[-1])
alist[-1] 相当于 alist[len(alist) - 1]

 

1.4 切片操作

通过下标操作是一次取出里面第一个元素.
通过切片, 则是一次取出一组连续的元素, 相当于得到一个 子列表
  • 使用 [ : ] 的方式进行切片操作
alist = [1, 2, 3, 4]
print(alist[1:3])
alist[1:3] 中的 1:3 表示的是 [1, 3) 这样的由下标构成的前闭后开区间.
也就是从下标为 1 的元素开始(2), 到下标为 3 的元素结束(4), 但是不包含下标为 3 的元素.
所以最终结果只有 2, 3.
  • 切片操作中可以省略前后边界
alist = [1, 2, 3, 4]
print(alist[1:])        # 省略后边界, 表示获取到列表末尾
print(alist[:-1])       # 省略前边界, 表示从列表开头获取
print(alist[:])         # 省略两个边界, 表示获取到整个列表.

  • 切片操作还可以指定 "步长" , 也就是 "每访问一个元素后, 下标自增几步"
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[::5])
  • 切片操作指定的步长还可以是负数, 此时是从后往前进行取元素. 表示 "每访问一个元素之后, 下标自 减几步"
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::1])
print(alist[::2])
print(alist[::3])
print(alist[1:-1:2])
alist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(alist[::-1])
print(alist[::-2])
print(alist[::-3])
print(alist[::-5])

 

  • 如果切片中填写的数字越界了, 不会有负面效果. 只会尽可能的把满足条件的元素获取
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(a[1:100])

 

alist = [1, 2, 3, 4]
print(alist[100:200])

 

1.5 遍历列表元素

"遍历" 指的是把元素一个一个的取出来, 再分别进行处理.

 

(1)最简单的办法就是使用 for 循环

alist = [1, 2, 3, 4]
for elem in alist:
    print(elem)

elem相当于临时变量。

(2)使用 for 按照范围生成下标, 按下标访问

alist = [1, 2, 3, 4]
for i in range(0, len(alist)):
    print(alist[i])
a = [1, 2, 3, 4]
for i in range(0, len(a)):
        a[i] = a[i] + 10

print(a)

注:在修改列表值的时候:

  • elem是临时变量,这种方式修改相当于覆盖了临时变量中的值,不能修改列表中的值。
  • 使用坐标访问,其实是在原空间修改。可以修改。

(3)使用 while 循环,手动控制下标的变化

alist = [1, 2, 3, 4]
i = 0
while i < len(alist):
    print(alist[i])
    i += 1

 

1.6 新增元素

  • 使用 append 方法, 向列表末尾插入一个元素(尾插).
alist = [1, 2, 3, 4]
alist.append('hello')
print(alist)
  • 使用 insert 方法, 向任意位置插入一个元素

insert 第一个参数表示要插入元素的下标.

alist = [1, 2, 3, 4]
alist.insert(1, 'hello')
print(alist)
什么是 "方法" (method):
方法其实就是函数. 只不过函数是独立存在的, 而方法往往要依附于某个 "对象".
像上述代码 alist.append , append 就是依附于 alist, 相当于是 "针对 alist 这个列表, 进行尾插操作".

1.7 查找元素

  • 使用 in 操作符, 判定元素是否在列表中存在. 返回值是布尔类型.
alist = [1, 2, 3, 4]
print(2 in alist)
print(10 in alist)
print(2 not in alist)
print(10 not in alist)

  • 使用 index 方法, 查找元素在列表中的下标. 返回值是一个整数. 如果元素不存在, 则会抛出异常.
alist = [1, 2, 3, 4]
print(alist.index(2))
print(alist.index(10))

 

 

1.8 删除元素

  • 使用 pop 方法删除最末尾元素
alist = [1, 2, 3, 4]
alist.pop()
print(alist)

 

  • pop 也能按照下标来删除元素
alist = [1, 2, 3, 4]
alist.pop(2)
print(alist)

  • 使用 remove 方法, 按照值删除元素
alist = [1, 2, 3, 4]
alist.remove(2)
print(alist)

 

a = ['python', 'list',  'group']
print(a)
a.remove('python')
print(a)

 

1.9 连接列表

  • 使用 + 能够把两个列表拼接在一起.
此处的 + 结果会生成一个新的列表. 而不会影响到旧列表的内容.

 

a = [1, 2, 3, 4]
b = [5, 6, 7]
print(a + b)
print(b + a)
  • 使用 extend 方法, 相当于把一个列表拼接到另一个列表的后面.
a.extend(b) , 是把 b 中的内容拼接到 a 的末尾. 不会修改 b, 但是会修改 a.
alist = [1, 2, 3, 4]
blist = [5, 6, 7]
alist.extend(blist)
print(alist)
print(blist)

 注:

extend()与 += 比较:

a = [1, 2, 3, 4]
b = [5, 6, 7]
#a.extend(b) 则是直接把b的内容拼接到了a的后面   ——>高效
a += b  #  a += b <==> a = a + b            ——>低效
print(a)
print(b)

 

2. 元组

元组的功能和列表相比, 基本是一致的.
(1)元组使用 ( ) 来表示
atuple = ( )
atuple = tuple()
a = ()
print(type(a))
b = tuple()
print(type(b))
(2)创建元组的时候,指定初始值
#创建元组的时候,指定初始值
a = (1, 2, 3, 4)
print(a)

(3)元组中的元素也可以使任意类型的

#元组中的元素也可以使任意类型的
a = (1, 'python', True, [])
print(a)

(4)通过下标来访问元组中的元素,下标是也是从0开始,到len-1 结束

 
#通过下标来访问元组中的元素,下标是也是从0开始,到len-1 结束
a = (1, 2, 3, 4)
print(a[1])
print(a[-1])
print(a[100])

(5)通过切片来获取元组中的一个部分

#通过切片来获取元组中的一个部分
a = (1, 2, 3, 4)
print(a[1:3])

(6)使用for循环等方式来进行遍历元素

#使用for循环等方式来进行遍历元素
a = (1, 2, 3, 4)
for elem in a:
    print(elem)

(7)使用in判断元素是否存在,使用index查找元素的下标

#使用in判断元素是否存在,使用index查找元素的下标
a = (1, 2, 3, 4)
print(3 in a)
print(a.index(3))

 (8)使用 + 拼接元组

#使用 + 拼接元组
a = (1, 2, 3, 4)
b = (5, 6, 7)
print(b + a)

  注:

#元组不支持修改值
a = (1, 2, 3, 4)
a[0] = 9   #error

 

元组不能修改里面的元素, 列表则可以修改里面的元素
因此, 像读操作,比如访问下标, 切片, 遍历, in, index, + 等, 元组也是一样支持的.
但是, 像写操作, 比如修改元素, 新增元素, 删除元素, extend 等, 元组则不能支持.
另外, 元组在 Python 中很多时候是默认的集合类型. 例如, 当一个函数返回多个值的时候.
def getPoint():
    return 10, 20
result = getPoint()
print(type(result))
此处的 result 的类型, 其实是元组.

 

问题来了, 既然已经有了列表, 为啥还需要有元组?
元组相比于列表来说, 优势有两方面:
  • 你有一个列表, 现在需要调用一个函数进行一些处理. 但是你有不是特别确认这个函数是否会把你的列表数据弄乱. 那么这时候传一个元组就安全很多.
  • 我们马上要讲的字典, 是一个键值对结构. 要求字典的键必须是 "可hash对象" (字典本质上也是一个hash表). 而一个可hash对象的前提就是不可变. 因此元组可以作为字典的键, 但是列表不行.
小结
列表和元组都是日常开发最常用到的类型. 最核心的操作就是根据 [ ] 来按下标操作.
在需要表示一个 "序列" 的场景下, 就可以考虑使用列表和元组.
如果元素不需要改变, 则优先考虑元组.
如果元素需要改变, 则优先考虑列表.

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

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

相关文章

初识 Bootstrap(前端开发框架)

初识 Bootstrap&#xff08;前端开发框架&#xff09;参考Bootstrap特点获取目录结构jQuery 与 Popper准备工作包含 jQuery 与 Poppermetabox-sizing基本模板无注释版本注释版本参考 项目描述Bootstrap 官方教程https://getbootstrap.net/docs/getting-started/introduction/百…

字节青训前端笔记 | HTTP 使用指南

本节课介绍 Http 协议的基本定义和特点&#xff0c;在此基础上&#xff0c;对于 Http 协议的发展历程及报文结构展开进一步分析。 从输入字符串到打开网页 输入地址浏览器处理输入信息浏览器发请求到达服务器服务器返回信息浏览器读取响应信息浏览器渲染页面加载完成 什么是…

KVM虚拟化简介 | 初识

目录 1、kvm架构 2、架构解析 3、kvm和qemu的作用 1、kvm架构 2、架构解析 从rhel6开始使用&#xff0c;红帽公司直接把KVM的模块做成了内核的一部分。xen用在rhel6之前的企业版中默认内核不支持&#xff0c;需要重新安装带xen功能的内核KVM 针对运行在x86 硬件上的、驻留在内…

配置 Git 连接 GitHub

文章目录0.安装 Git1.注册 GitHub 账号2.配置 Git 的用户名和邮箱3.为本机生成 SSH 密钥对4.将公钥拷贝到 GitHub 上5.测试0.安装 Git Git 官网链接&#xff1a;https://git-scm.com/ Git 官网下载链接&#xff1a;https://git-scm.com/downloads 1.注册 GitHub 账号 GitHu…

蓝桥杯STM32G431RBT6学习——定时器PWM输出

蓝桥杯STM32G431RBT6学习——定时器PWM输出 前言 PWM波输出作为定时器的一个常用功能&#xff0c;也属于高频的考点。从数据手册的定时器解析可以了解到&#xff08;上篇描述&#xff09;&#xff1a;除了基本定时器&#xff08;TIM6、7&#xff09;外&#xff0c;其他所有定…

全国产网管型工业交换机的几种管理方式

全国产网管型工业交换机按其字面上的意思&#xff0c;一是全国产化&#xff08;工业交换机&#xff09;&#xff0c;就是交换机内部95%以上元器件的国内生产制造&#xff0c;重要的硬件芯片&#xff0c;比如交换机芯片、管理芯片、接口芯片等必须是国内厂商在国内研发、生产、制…

学习记录664@项目管理之项目进度管理

什么是项目进度管理 项目进度管理包括为管理项目按时完成所需的7个过程&#xff0c;具体为: 规划进度管理过程一一制定政策、程序和文档以管理项目进度。定义活动过程一一识别和记录为完成项目可交付成果而需采取的具体行动。排列活动顺序过程一一识别和记录项目活动之间的关…

【Kubernetes 企业项目实战】04、基于 K8s 构建 EFK+logstash+kafka 日志平台(下)

目录 一、安装收集日志组件 Fluentd 二、kibana 可视化展示查询 k8s 容器日志 三、测试 efk 收集生产环境业务 pod 日志 四、基于 EFKlogstashkafka 构建高吞吐量的日志平台 4.1 部署 fluentd 4.2 接入 kafka 4.3 配置 logstash 4.4 启动 logstash 本篇文章所用到的资料…

对象的比较

Java中基本类型间的元素比较&#xff0c;可以直接通过">"、"<"、""等符号判断大小&#xff0c;也可使用compareTo比较大小或者equals判断是否相等&#xff0c;作为引用类型的String类不可以使用">"、"<"比较大小…

2023最新 - 谷歌学术文献Bibtex批量获取脚本

首先&#xff0c;自行解决网络访问问题&#xff0c;保证能访问到谷歌学术&#xff0c;否则下面可免看 第一步&#xff1a;安装 selenium python 安装 selenium pip install selenium 第二步&#xff1a;安装 Chrome 浏览器 http://chorm.com.cn/ 第三步&#xff1a;根据 …

Linux应用基础——控制服务与守护进程

一、systemd基本介绍 1.作用 systemd守护进程管理Linux的启动&#xff0c;一般包括服务启动和服务管理&#xff0c;它可以在系统引导时以及运行中的系统上激活系统资源、服务器守护进程和其他进程 2.守护进程 守护进程是执行各种任务的后台等待或运行的进程&#xff0c;一般…

day18|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08…

【容器技术——Docker基本使用】

文章目录docker1 概述1.1 是什么1.2 相关资源2 使用2.1 镜像2.1.1 拉取镜像2.2.2 列出镜像2.2.3 删除镜像2.2 容器2.2.1 运行容器2.2.2 查看容器2.2.3 启动和关闭容器2.2.4 删除容器2.3 制作镜像2.4 Docker 仓库2.4.1 注册登录2.4.2 推送镜像2.5 dockerfile2.5.1 构建镜像2.5.2…

关于CIS移植的一些基本概念

1. 摄像头sensor 的原理 定时脉冲生成器会生成clock&#xff0c;用于访问image sensor 阵列中的行&#xff0c;预充电&#xff0c;并且按顺序采样像素阵列中的所有行。在一个行的预充电和采样的时间段里&#xff0c;像素的电荷量会随着曝光时间而逐渐减少。这就是快门结构中的曝…

Python采集周边烤肉店数据,康康哪一家最好吃?

人生苦短&#xff0c;我用Python 这不是天气开始突然大范围降温了吗&#xff1f; 降温就要吃烤肉啊 滋辣滋辣的声音特别好听&#xff5e; 放假吃烤肉真的特别快乐~ 天冷了&#xff0c;逛街…… 天冷了&#xff0c;吃烤肉…… 天冷了&#xff0c;喝奶茶…… 有温度的冬天&a…

p83出现的问题(空指针异常)原因及解决方案

我的GitHub&#xff1a;Powerveil GitHub我的Gitee&#xff1a;Powercs12 (powercs12) - Gitee.com皮卡丘每天学Java相关知识&#xff1a;Mybatis Plus、Spring Security本质原因&#xff1a;我们自己将Article字段的update字段做了自动填充导致自动填充时无法获取当前用户(程…

pytorch Conv2d令人迷惑的几个参数

本篇仅用来记录nn.Conv2d()中容易令人不解的几个参数 1. nn.Conv2d() 的输出维度的计算 相信大家都看过官网给出的计算方式: 直接套公式即可, 但需要注意的是, 最终计算的结果要向下取整. 2. dilation 官方解释为: dilation (int or tuple, optional) – Spacing between k…

贪心 455. 分发饼干

455. 分发饼干 难度简单636 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&…

为什么STM32设置Flash地址0x08000000而不是0x00000000?STM32的启动过程

STM32F103ZE芯片存储空间的地址映射关系图。 在MDK编译程序设置ROM和RAM地址时候发现&#xff1a;    IROM1为片上程序存储器&#xff0c;即片上集成的Flash存储器&#xff0c;对该处理器Flash大小为512KB&#xff0c;即0x80000 地址区间为0x8000000~0x0807FFFF  IRAM1为片…

day10文件知识点

模态对话框ajax后台ModelForm校验 目录切换&#xff1a;展示当前文件夹和文件 删除文件夹&#xff1a;嵌套的子文件和子文件夹全部删除 js上传文件到cos&#xff08;wiki用python上cos上传文件&#xff09; 进度条的操作&#xff08;bootstrap&#xff09;实现 删除文件&#x…