Python 基础:列表与元组的创建、操作及区别
Python 列表和元组是存储序列数据的常用结构。列表可变,支持增删改查及切片操作;元组不可变,主要用于数据保护或作为字典键。两者的创建方式、下标访问、切片技巧、遍历方法以及元素插入删除操作,对比了 extend 与 + 拼接的区别,并阐述了元组在函数返回值和哈希场景下的优势。

Python 列表和元组是存储序列数据的常用结构。列表可变,支持增删改查及切片操作;元组不可变,主要用于数据保护或作为字典键。两者的创建方式、下标访问、切片技巧、遍历方法以及元素插入删除操作,对比了 extend 与 + 拼接的区别,并阐述了元组在函数返回值和哈希场景下的优势。

在编程中,我们经常需要使用变量来保存或表示数据。
如果代码中需要表示的数据个数比较少,我们直接创建多个变量即可。
num1 = 10
num2 = 20
num3 = 30
但是有的时候,代码中需要表示的数据特别多,甚至也不知道要表示多少个数据。这个时候,就需要用到列表。
就像我们去超市买辣条,如果就只是买一两根辣条,那咱们直接拿着辣条就走了。
但是如果一次买个十根八根的,这个时候用手拿就不好拿,超市老板就会给我们个袋子。
这个袋子,就相当于
列表。
列表就是买散装辣条,装好了袋子之后,随时可以把袋子打开,再往里多加辣条或者拿出去一些辣条。
元组就是买包装辣条,厂家生产好了辣条之后,一包就是固定的这么多,不能变动了。
# 列表和元组的概念
# 变量就是内存空间,用来表示 / 存储数据
# 如果表示的数据少,直接定义几个变量就行了
# num1, num2, num3
# 也有的时候,要表示的数据就比较多
# Python 的列表和元组,就是这样的机制,可以用一个变量来表示很多个数据
# 就类似于其他编程语言中的'数组'
# 此处的这个袋子,就是列表 / 元组
# 袋子里的辣条,就是我们要表示的数据
# 列表和元组,大部分的功能都是差不多的!但是有一个功能是非常明显的区别:
# (1)列表是可变的:创建好了之后,随时能改
# (2)元组是不可变的:创建好了之后,改不了,要想改,只能丢弃旧的,搞个新的~
# 散装辣条,想再多来几根,很容易-->可以随时改 => 列表可变
# 包装辣条,想再多来几根不容易,但是可以换一个大包的 => 元组不可变
创建列表主要有两种方式。
alist = []
alist = list()
print(type(alist))
可以直接使用 print 来打印 list 中的元素内容。
alist = [1, 2, 3, 4]
print(alist)
这一点和 C++ Java 差别较大。
alist = [1, 'hello', True]
print(alist)
因为 list 本身是 Python 中的内建函数,不宜再使用 list 作为变量名,因此命名为 alist。
我们把 [ ] 中填写的数字,称为 下标 或者 索引。
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])

使用 len 函数可以获取到列表的元素个数。
alist = [1, 2, 3, 4]
print(len(alist))
下标可以取负数,表示 '倒数第几个元素'。
alist = [1, 2, 3, 4]
print(alist[3])
print(alist[-1])
alist[-1]相当于alist[len(alist) - 1]。
# 列表的创建和下标访问
# 创建链表
# 1、直接使用字面值来创建
# [] 就表示一个空的列表
a = []
# print(type(a))
# 2、使用 list() 来创建
# b = list()
# print(type(b))
# 3、使用[]还有个好处:可以在创建列表的时候,在[]中指定列表的初始值
# 元素之间使用 , 来分割
# a = [1, 2, 3, 4]
# print(a)
# 4、可以在同一个列表里放不同的变量
# a = [1, 'hello', True, [4, 5, 6]]
# print(a)
# 列表里面可以管理很多元素,通过下标访问的方式来获取到列表中的元素
# 要用到一个下标访问运算符 —— 也是[],注意联系上下文,就像 -(负号 / 减号)
a = []
# 列表
# 把[]放到一个列表变量的后面,同时[]写上一个整数此时它就是下标访问运算符
# []中间写的这个整数,就是称为'下标'或者'索引'
# 5、使用下标访问元素
a = [1, 2, 3, 4]
# print(a[2])
# C 语言开始,后世的各种语言,下标都是从 0 开始计数的
# Python 中的下标,是从 0 开始计数的
# 6、使用下标来修改列表元素 --> 元组就是只能使用下标来读不能来写了
# a = [1, 2, 3, 4]
# a[2] = 100
# print(a[2])
# 由于下标是从 0 开始计算的-->对于列表来说,下标的有效范围,从 0 开始,一直到其长度 -1 为止
# 当我们下标超出有效范围的时候,尝试访问,就会出现异常,程序崩溃
# 7、超出下标有效范围,就会出现异常
# a = [1, 2, 3, 4]
# a[100] = 0
# print(a)
# 报错:IndexError: list assignment index out of range
# 报错内容:超出列表的有效范围
# 8、可以使用内建函数 len 来获取到列表的长度 (元素个数),和字符串类似
# a = [1, 2, 3, 4]
# print(len(a)) # 知道了列表长度,就很容易知道列表的下标范围了
# len(length):len 可以传字符串,列表,元组,字典,自定义的类...=>(一个函数可以传这么多类型的原理)动态类型
# 9、Python 中的下标,其实还可以写成负数
# 例如写成 -1,其实等价于 len(a) - 1
a = [1, 2, 3, 4]
print(a[len(a) - 1])
# 或者直接这样理解:-1 就是倒数第一个元素!-2 就是倒数第二个,以此类推……
print(a[-1])
# 简单直观,其实就是 a(len(a) - 1) 的简写
# 4
# 4
通过下标操作是一次取出里面第一个元素。
通过切片,则是一次取出一组连续的元素,相当于得到一个 子列表。
alist = [1, 2, 3, 4]
print(alist[1:3])
alist[1 : 3] 中的 1 : 3 表示的是 [1 , 3) 这样的由下标构成的前闭后开区间。
也就是从下标为 1 的元素开始(下标为 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[::-5])
alist = [1, 2, 3, 4]
print(alist[100:200])
# 列表的切片操作
# 和列表的下标访问操作很类似——下标访问操作是一次取出一个元素,而切片操作是一次取出一段连续的元素,
# 本质上相当于取出当前列表的一个子列表
# 一旦涉及到区间,最常见的就是前闭后开区间
# 1、切片操作的基本使用
# a = [1, 2, 3, 4]
# print(a[1:3])
# 2、使用切片的时候,省略边界
# a = [1, 2, 3, 4]
# 省略后边界,意思是从开始位置,一直取到整个列表结束
# print(a[1:])
# 省略前边界,意思还、是从列表的 0 号元素开始取,一直取到结束的后边界
# print(a[:2])
# 此处切片中的下标也可以写成负数
# print(a[:-1])
# 还可以把开始边界和结束边界都省略掉?!得到的还是列表自身!
# print(a[:])
# 3、带有步长的切片操作
# 切片操作,还可以指定'步长',range
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# print(a[::1])
# print(a[::2])
# print(a[::3])
# print(a[1:-1:2]) # 从 1 开始到 -1 结束,步长设定为 2
# 4、步长还可以是负数,当步长为负数的时候,意思是从后往前来取元素
# a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
# print(a[::-1]) # 从后往前来取元素
# print(a[::-2])
# 5、当切片中的访问超出有效下标之后,不会出现异常!而是尽可能地把符合要求的元素给获取到!
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print(a[1:100])
# 不光列表,元组也是一样的,甚至前面的字符串也是可以通过切片操作取出其中的一部分的,所涉及到的规则都是一样的
'遍历'指的是把元素一个一个的取出来,再分别进行处理。
alist = [1, 2, 3, 4]
for elem in alist:
print(elem)
alist = [1, 2, 3, 4]
for i in range(0, len(alist)):
print(alist[i])
alist = [1, 2, 3, 4]
i = 0
while i < len(alist):
print(alist[i])
i += 1


# 列表的遍历操作
# 遍历:把一个列表里面的每个元素,都依次的取出来,并进行某种操作
# 就像老师上课点名,不重不漏
# 遍历 ==> 搭配循环
# 1、使用 for 循环来遍历列表(最常用的,不修改列表本身)
# elem 就代表了列表里的每个元素,elem 就是 element 这个单词的缩写
# a = [1, 2, 3, 4, 5]
# for elem in a: # for in 后面这个要求是一个可迭代对象(可以一个一个取出里面包含的元素)
# print(elem) # 在这个遍历过程中,循环里面写的,不一定是打印,还可以是别的
# # 不会对原来的列表产生影响,只是修改了 elem 这个变量
# a = [1, 2, 3, 4, 5]
# for elem in a:
# elem = elem + 10
# print(a)
# 2、使用 for 循环遍历——通过下标的方式(如果想在遍历过程中修改列表的值,选择)
# a = [1, 2, 3, 4, 5]
# for i in range(0, len(a)):
# print(a[i])
# # 取到了实打实在列表里面的元素,会对原来的列表产生影响
# a = [1, 2, 3, 4, 5]
# for i in range(0, len(a)):
# # print(a[i])
# a[i] = a[i] + 10
# print(a)
# 3、使用 while 循环,通过下标遍历 (想在遍历过程中对列表本身的值进行修改)
a = [1, 2, 3, 4, 5]
i = 0
while i < len(a):
print(a[i])
i += 1
alist = [1, 2, 3, 4]
alist.append('hello')
print(alist)
insert 第一个参数表示要插入元素的下标。
alist = [1, 2, 3, 4]
alist.insert(1, 'hello')
print(alist)
方法其实就是函数,只不过函数是独立存在的,而方法往往要依附于某个'对象'。
像上述代码 alist.append,append 就是依附于 alist,相当于是

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online