【Python】列表和元组

news2024/11/25 6:58:50

文章目录

  • 一. 概念介绍
  • 二. 列表
    • 1. 创建列表
    • 2. 访问元素
    • 3. 切片操作
    • 4. 列表的遍历
      • 4.1 范围-for
      • 4.2 普通的 for 循环
      • 4.3 while 循环
    • 5. 插入元素
      • 5.1 append() 方法
      • 5.2 insert() 方法
    • 6. 删除元素
      • 6.1 pop() 方法
      • 6.2 remove() 方法
    • 7. 查找元素
      • 7.1 in 和 not in 操作符
      • 7.2 index() 方法
    • 8. 列表拼接
      • 8.1 +和+=
      • 8.2 extend() 方法
  • 三. 元组
    • 1. 基本介绍
    • 2. 元组的使用

一. 概念介绍

我们知道变量就是内存空间,它用来表示和存储数据。如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可:

num1 = 10
num2 = 10
num3 = 10

但是有的时候,代码中需要表示的数据特别多,甚至也不知道具体要表示多少个数据。这个时候,就需要用到列表和元组了,它们类似于其他编程语言中的“数组”。

就像我们去超市买辣条,如果就只是买一两根辣条,那咱们可以直接拿着辣条就走了。
但是如果一次买个十根八根的,这个时候用手拿就不好拿,超市老板就会给我们个袋子。
这个袋子,就相当于 列表。

元组和列表相比,是非常相似的。只是列表中放哪些元素可以修改调整,而元组中放的元素是创建元组的时候就设定好的,之后不能修改调整。

二. 列表

1. 创建列表

创建列表主要有两种方式(推荐第一种)

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

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

输出结果:
在这里插入图片描述
几点说明
(1) 如果需要往里面设置初始值,可以直接写在 [ ] 当中,元素之间用逗号来分割

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

-------运行结果-------
[1, 2, 3, 4]

(2)列表中存放的元素允许是不同的类型(这一点和 C++/Java 差别较大)

ls = [1, 'hello', True]
print(ls)  

-------运行结果-------
[1, 'hello', True]

2. 访问元素

1、可以通过下标访问操作符 [ ] 来获取到列表中的任意元素,我们把 [ ] 中填写的数字,称为 下标 或者 索引

ls = [1, 2, 3, 4]
# 下标是从 0 开始计数的, 因此下标为 2 , 则对应着 3 这个元素
print(ls[2])  # 3

注意区分创建列表和访问元素时的 [ ]

在这里插入图片描述

2、通过下标不光能读取到元素内容,还能修改元素的值

ls = [1, 2, 3, 4]
ls[2] = 100
print(ls)  

-------运行结果-------
[1, 2, 100, 4]

因为下标是从 0 开始计算的,因此下标的有效范围是[0, 列表长度-1]。如果下标超出列表的有效范围,会抛出异常:

在这里插入图片描述

3、使用内建函数 len 可以获取到列表的长度(元素个数)

ls = [1, 2, 3, 4]
print(len(ls))  

-------运行结果-------
4

PS: len 可以传字符串、列表、元组、字典、自定义的类等变量。

4、Python 中的下标,其实还可以写成负数,表示 “倒数第几个元素”

ls = [1, 2, 3, 4]
print(ls[-1])  # 4
# ls[-1] 相当于 ls[列表长度 - 1]
print(ls[len(ls)-1])  

-------运行结果-------
4

3. 切片操作

通过对列表进行切片操作,可以访问到列表中一段连续区间的数据:

a = [1, 2, 3, 4]
print(a[1:4])

-------运行结果-------
[2, 3, 4]

PS:对列表进行切片时,区间的范围是左闭右开

使用切片时可以省略边界

a = [1, 2, 3, 4]
# 省略右边界,表示左边界开始,取到整个列表结束
print(a[1:])
# 省略左边界,表示从从列表的0号元素开始,取到右边界
print(a[:3])
# 同时省略左、右边界,表示取列表的全部元素
print(a[:])

-------运行结果-------
[2, 3, 4]
[1, 2, 3]
[1, 2, 3, 4]

PS:边界为负数(n)的话,表示的是倒数第 n 个元素

设置步长

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[::1])
print(a[::2])

-------运行结果-------
[1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
[1, 3, 5, 7, 9]

PS:步长为负数时,表示从后往前取元素

4. 列表的遍历

遍历指的是把列表中的每个元素都依次取出来,然后进行某种操作。我们可以通过以下三种方式遍历列表:

  • 范围-for
  • 普通的 for 循环
  • while 循环

4.1 范围-for

在这里插入图片描述

4.2 普通的 for 循环

通过下标遍历列表元素

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for i in range(0, len(a)):
    a[i] += 10

print(a)

-------运行结果-------
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

4.3 while 循环

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

i = 0
while i < len(a):
    a[i] += 10
    i += 1

print(a)

-------运行结果-------
[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

5. 插入元素

5.1 append() 方法

append() 方法只能在列表最后位置插入新元素

a = [1, 2, 3, 4]
# 在最后位置插入元素'hello'
a.append('hello')
print(a)

-------运行结果-------
[1, 2, 3, 4, 'hello']

补充说明:
在这里插入图片描述

5.2 insert() 方法

insert() 方法可以在列表的任意位置插入新元素

a = [1, 2, 3, 4]
a.insert(1, 'hello')
# 下标超过范围时,默认在最后位置插入
a.insert(100, 'world')
print(a)

-------运行结果-------
[1, 'hello', 2, 3, 4, 'world']

6. 删除元素

6.1 pop() 方法

使用 pop() 可以按照下标位置来删除元素

1)如果不写下标,则默认删除最后一个元素

a = [1, 2, 3, 4]
a.pop()
print(a)

-------运行结果-------
[1, 2, 3]

2)可以指明下标来删除特定位置的元素

如果下标超出范围,就会抛异常,而不是返回-1,因为在 Python 中负数下标也是有效的。

a = [1, 2, 3, 4]
a.pop(1)
print(a)

-------运行结果-------
[1, 3, 4]

6.2 remove() 方法

与 pop() 通过下标删除元素的方法不同,remove() 方法是通过值来删除元素,如果这个值不存在与列表中则会抛异常。

a = ['aa', 'bb', 'cc', 'dd']
a.remove('cc')
print(a)

-------运行结果-------
['aa', 'bb', 'dd']

7. 查找元素

7.1 in 和 not in 操作符

a = ['aa', 'bb', 'cc', 'dd']
print('cc' in a) # True
print('ff' in a) # False
print('cc' not in a) # False
print('ff' not in a) # True

7.2 index() 方法

index() 方法用来查找给定元素在元素中的下标,如果元素不存在,就会抛异常。

a = ['aa', 'bb', 'cc', 'dd']
print(a.index('bb')) # 1

8. 列表拼接

8.1 +和+=

使用 + 可以拼接两个列表,且原列表不会发生改变:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a + b
print(c)

-------运行结果-------
[1, 2, 3, 4, 5, 6, 7, 8]

使用 += 时,被拼接列表的值会发生改变:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
a += b;
print(a)
print(b)

-------运行结果-------
[1, 2, 3, 4, 5, 6, 7, 8]
[5, 6, 7, 8]

8.2 extend() 方法

注意 extend() 方法没有返回值:

a = [1, 2, 3, 4]
b = [5, 6, 7, 8]
c = a.extend(b)
print(c)
print(a)

-------运行结果-------
None
[1, 2, 3, 4, 5, 6, 7, 8]

None 非常类似于C语言中的 NULL,或者 Java 里的 null

三. 元组

1. 基本介绍

元组和列表的区别在于:列表的可以修改,而元组永远保持初始化的值。实际在设计函数参数时,我们可以把形成设为元组类型,这样可以保证函数内部不可修改形成对象的值。

2. 元组的使用

1)创建元组

同样也是有两种方式创建元组

a = ()
b = tuple()
print(type(a))
print(type(b))

-------运行结果-------
<class 'tuple'>
<class 'tuple'>

2)创建元组的时候,指定初始值

a = (1, 2, 3, 4)
print(a)

-------运行结果-------
(1, 2, 3, 4)

3)元组中的元素可以是任意类型的

a = ('a', 3, True, [])
print(a)

-------运行结果-------
('a', 3, True, [])

4)可以通过下标来访问元组中的元素,下标范围是 [0, len-1]

a = (1, 2, 3, 4)
print(a[1])
print(a[-1])
# 下标不能越级,否则会抛异常
# print(a[100])

-------运行结果-------
2
4

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

a = (1, 2, 3, 4, 5)
print(a[1:3])

-------运行结果-------
(2, 3)

6)可以使用 for、while 循环来遍历元组

a = (1, 2, 3, 4)
# 1、范围for
for elem in a:
    print(elem)

# 2、普通 for 循环
for i in range(0, len(a)):
    print(a[i])

# 3、while 循环
i = 0
while i < len(a):
    print(a[i])
    i += 1

7)可以使用 in、not in 来判断元素是否存在,使用 index 查找元素下标

a = (1, 2, 3, 4)
print(3 in a)
print(3 not in a)
print(a.index(3))

-------运行结果-------
True
False
2

8)可以使用 + 来拼接两个元组

a = (1, 2, 3, 4)
b = (5, 6, 7, 8)
print(a + b)

-------运行结果-------
(1, 2, 3, 4, 5, 6, 7, 8)

9)元组只支持 “读” 操作,不能支持 “写” 操作

a = (1, 2, 3, 4)
a[1] = 20

-------运行结果-------
TypeError: 'tuple' object does not support item assignment

10)当进行多元赋值的时候,其实本质上是按照元组的方式来进行工作的

def Func():
    x = 10
    y = 20
    return x, y

print(type(Func()))

# 这里会把元组的元素依次取出来,赋值给a、b
a, b = Func()

-------运行结果-------
<class 'tuple'>

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

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

相关文章

【Linux】MHA高可用配置及故障切换

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MHA高可用配置及故障切换 MHA高可用配置及故障切换MHA概述MHA 的组成MHA 的特点 搭建 MySQL MHA1&#xff0e;Master、Slave1、Slave2 节点上安装 mysql5.72&#xff0e;修改…

电压放大器驱动感性负载有哪些特点

电压放大器是一种常见的信号放大器&#xff0c;广泛应用于各种电子设备。当电压放大器需要驱动感性负载时&#xff0c;需要采取一些特殊措施来确保系统的稳定和可靠性。 感性负载是指由电感器构成的电路元件&#xff0c;它在电路中起到了储存能量的作用。感性负载可以分为两类&…

Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?

这个也是线上非常常见的一个问题&#xff0c;就是多客户端同时并发写一个 key&#xff0c;可能本来应该先到的 数据后到了&#xff0c;导致数据版本错了&#xff1b;或者是多客户端同时获取一个 key&#xff0c;修改值之后再写回去&#xff0c; 只要顺序错了&#xff0c;数据就…

阵列信号处理笔记(3):阵列调向、栅瓣、半功率波束带宽、端射阵列

阵列信号处理笔记 文章目录 阵列信号处理笔记阵列调向栅瓣调向对方向图的影响调向对HPBW的影响工程相关MATLAB代码阵列调向u域平移的动图 θ \theta θ域调向&#xff0c; θ 0 ∘ \theta 0^{\circ} θ0∘、 θ 6 0 ∘ \theta 60^{\circ} θ60∘、 θ 13 5 ∘ \theta 135^{\…

信号链噪声分析2

目录 概要 整体架构流程 技术名词解释 2.绘制信号链的简化原理图 技术细节 小结 概要 提示&#xff1a;这里可以添加技术概要 本文介绍对高速宽带宽信号链进行噪声性能理论分析的各个步骤。尽管选择了一个特 定信号链&#xff0c;但介绍的这些步骤适用于所有类型的信号链…

uniapp 引入腾讯地图解决H5端接口跨域

一、申请腾讯地图key 进入腾讯地图开放平台 二、引入腾讯地图 1. 安装 vue-jsonp npm install --save vue-jsonp 2.在 main.js 中使用 import { VueJsonp } from vue-jsonp; Vue.use(VueJsonp); 3.获取定位 // 获取当前位置 getLocation() {let _this this;uni.getLocation…

【C#】云LIS检验医学信息系统源码

系统基于云计算为医院机构改善患者服务质量提供了强有力的支持&#xff0c;“以患者为核心”这一理念得到了充分实现&#xff0c;基于云计算的高效区域医疗信息服务&#xff0c;会为医疗行业带来跨时代的变革。 一、使用技术框架说明 开发语言&#xff1a;C# 6.0、JavaScript …

360手机快充判断 360手机充电异常 360手机提示电池温度过低

360手机快充判断 360手机充电异常 360手机提示电池温度过低 参考&#xff1a;360手机-360刷机360刷机包twrp、root 360刷机包360手机刷机&#xff1a;360rom.github.io 【前言】 因360手机&#xff0c;除N7代部分机型外&#xff0c;其它均为micro usb充电接口&#xff1b;系统…

微信小程序editor富文本编辑器 有关图片的属性

微信小程序editor富文本编辑器 有关图片的属性 属性类型默认值必填说明show-img-sizebooleanfalse否点击图片时显示图片大小控件show-img-toolbarbooleanfalse否点击图片时显示工具栏控件show-img-resizebooleanfalse否点击图片时显示修改尺寸控件 详细请看&#xff1a;edito…

基于Nova的MinRoot VDF实现

1. 引言 前序博客有&#xff1a; Nova代码解析 代码见&#xff1a; https://github.com/Microsoft/Nova&#xff08;Rust&#xff09; 有多种类型的VDF算法&#xff1a; 同一类型的VDF&#xff0c;根据所选择的曲线不同&#xff0c;所使用的参数也有所不同&#xff1a; …

基于matlab使用点特征匹配稳定从抖动平台捕获的视频(附源码)

一、前言 此示例演示如何稳定从抖动平台捕获的视频。稳定视频的一种方法是跟踪图像中的显著特征&#xff0c;并将其用作锚点以消除与其相关的所有扰动。但是&#xff0c;此过程必须了解第一个视频帧中这种显着特征的位置。在此示例中&#xff0c;我们探索了一种无需任何此类先…

rz、sz常见报错怎么解决?

使用shell和mobaxterm 中上传下载文件遇到的问题 常见报错一&#xff1a; 首先要使用Ctrlx 来退出&#xff0c;或者等待一会&#xff1b; 然后重新输入sz 要下载的文件名 空格 ,然后按ctrl右键&#xff0c;选择如下选项 常见错误二&#xff1a; sz还有一些参数&#xff0…

java之路——带你了解Hibernate与基本过程

文章目录 前言一、Hibernate用来干嘛的二、Hibernate与mybatisHibernate的基本开发步骤 前言 Hibernate框架的发展可以追溯到2001年&#xff0c;它在过去的几年里获得了广泛的应用和持续的发展。 其中的发展演变&#xff1a; 初期版本&#xff08;2001-2006年&#xff09;&am…

记一次 JMeter 压测 HTTPS 性能问题

目录 前言&#xff1a; 问题背景 问题分析 切入点&#xff1a;垃圾回收 调整思路&#xff1a;为什么频繁 SSL 握手 问题验证 回归测试 源码验证 前言&#xff1a; 在进行性能测试时&#xff0c;JMeter是一个常用的工具&#xff0c;可以模拟大量并发用户来测试系统的负…

QT学习笔记3--信号和槽

作用 信号槽是用来连接信号的发出端和接收端&#xff0c;其本身是没有关联的。利用connect函数将两个端耦合在一起。 函数格式 connect(信号的发送者&#xff0c;发送的具体信号&#xff0c;信号的接受者&#xff0c;信号的处理&#xff08;槽&#xff09;) 实例 利用按键关…

MultiTimer 软件定时器扩展模块的研究与优化【原创】

文章目录 前言收获main.cMultiTimer.cMultiTimer.h 前言 博主花费几天时间研究了此开源软件定时器扩展模块代码&#xff0c;并参考别的博主讲解解决了定时器计数值会溢出的问题&#xff08;很多博主写的文章并没有谈到这个计数溢出问题&#xff0c;我就想问一下看代码自己都不思…

MathType公式批量转换为Word自带公式的VBA实现及error ‘4198‘ 处理

VBA 纯新手&#xff0c;程序可能比较傻&#xff0c;大家将就看。有改进建议&#xff0c;欢迎留言 参考链接&#xff1a; 1、2种办法把MathType公式转换为Word公式 2、一键批量将mathtype公式转换成word自带公式-vba/vbnet_mathtype批量转word自带_一路向前的小Q的博客-CSDN博…

如何保证缓存与数据库的双写一致性?

分析&#xff1f; 你只要用缓存&#xff0c;就可能会涉及到缓存与数据库双存储双写&#xff0c;你只要是双写&#xff0c;就一定会有数据一 致性的问题&#xff0c;那么你如何解决一致性问题&#xff1f; 一般来说&#xff0c;如果允许缓存可以稍微的跟数据库偶尔有不一致的情…

合同数智化如何助力地产企业实现变革“突围”?

从稳步发展到求新求变&#xff0c; 数智化成破局关键 近年来&#xff0c;随着宏观经济政策调整&#xff0c;在中央房住不炒的大基调下&#xff0c;房地产逐步回归居住属性。在这样的大背景下&#xff0c;针对不同类型的房地产企业&#xff0c;国家出台了不同的数字化转型指导文…

【Bio】头骨组成,及其剖切面

在总结这篇文章之前&#xff0c;我看过了一本书《认知觉醒》&#xff0c;里边有提到一个观点&#xff1a;我们不仅要去获取新知识&#xff0c;也要注重对新知识的“缝接”&#xff0c;这个过程也就是关联。这样&#xff0c;如沙粒般的新知识才能关联到一起&#xff0c;达到聚沙…