python中的数据容器元组(tutle)和列表推导式

一. 元组的引入

1 元组的定义:元组是一种不可变的序列类型

元组可以看作是不可变的列表,它具有列表的大多数特点。元组常量用圆括号表示,例如,(1,2)、(‘a’,‘b’,‘abc’)。

元组没有列表中那么多方法可以使用,因为不可变,所以安全速度比列表快。

元组的主要特点如下。
元组可包含任意类型的对象。
元组是有序的。元组中的对象可通过位置进行索引和分片。
元组的大小不能改变,既不能为元组添加对象,也不能删除元组中的对象。
元组中的对象不能改变。
元组中存储的是对象的引用,而不是对象本身

2 元组的基本操作包括:创建元组、求长度、合并、重复、迭代、关系判断、索引和分片等。

二.元组的创建
1 元组特点:定义元组使用 小括号 ,且 逗号 隔开各个数据,数据可以是不同的数据类型。

在这里插入代码片

t1 = tuple() # 创建空元组对象
# 多个数据元组
t2 = (10, 20, 30)
# 单个数据元组
t3 = (10,)

**注意**:如果定义的元组只有一个数据,那么这个数据后面也好添加逗号,否则数据类型为唯一的
这个数据的数据类型

注意元组中的字符串的输出

在这里插入代码片

t5 = tuple('hello')
print(t5) # 输出 ('h', 'e', 'l', 'l', 'o')

2 元组取值与切片

元组的取值、切片与列表时一样使用
不能对元组的元素进行删除,但是可以删除整个元组:

在这里插入代码片

In [1]: t = tuple("01234")
In [2]: t
Out[2]: ('0', '1', '2', '3', '4')
# 直接获取
In [3]: t[0]
Out[3]: '0'
In [4]: t[-1]
Out[4]: '4'
# **不能修改**
In [5]: t[0] = 1
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-c8aeb8cd20ae> in <module>

----> 1 t[0] = 1
TypeError: 'tuple' object does not support item assignment
In [6]: t[0:5]
Out[6]: ('0', '1', '2', '3', '4')

3 元组的常见操作

元组对象常支持两个方法:count()和index()。

index():查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同。

在这里插入代码片

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.index('aa')) # 0

count():统计某个数据在当前元组出现的次数。

在这里插入代码片

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(tuple1.count('bb')) # 2


len():统计元组中数据的个数。

在这里插入代码片

tuple1 = ('aa', 'bb', 'cc', 'bb')
print(len(tuple1)) # 4

但是如果元组里面有列表修改列表里面的数据则是支持的

在这里插入代码片

tuple2 = (10, 20, ['aa', 'bb', 'cc'], 50, 30)
print(tuple2[2]) # 访问到列表
# 结果:(10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)
tuple2[2][0] = 'aaaaa'
print(tuple2)
# 结果: (10, 20, ['aaaaa', 'bb', 'cc'], 50, 30)

三.元组和列表的区别

1 元组的特点

元组一旦定义就不允许更改。
元组没有 append() 、 extend() 和 insert() 等方法,无法向元组中添加元素。
元组没有 remove() 或 pop() 方法,也无法对元组元素进行 del 操作,不能从元组中删除元素。
从效果上看, tuple() 冻结列表,而 list( ) 融化元组。

2 元组的优点

Ⅰ元组的速度比列表更快快快快。如果定义了一系列常量值,而所需做的仅是对它进行遍历,那么一般使用
Ⅱ元组而不用列表。
Ⅲ元组对不需要改变的数据进行 “写保护” 将使得代码更加安全。
Ⅳ元组可用作字典的“键”,也可以作为集合的元素。列表永远不能当做字典键使用,也不能作为集合的元素,因为列表不是不可变的。
Ⅴ不可变

四.拓展-列表推导式

1 作用:用一个表达式创建一个有规律的列表或控制一个有规律列表。

列表推导式又叫列表生成式。

2案例
需求:创建一个0-10的列表。
方法1 while循环实现

在这里插入代码片

# 1. 准备一个空列表
list1 = []
# 2. 书写循环,依次追加数字到空列表list1中
i = 0
while i < 10:
list1.append(i)
i += 1
print(list1)

方法2 for循环实现

在这里插入代码片

list1 = []
for i in range(10):
list1.append(i)
print(list1)

方法3 列表推导式实现

在这里插入代码片

list1 = [i for i in range(10)]
print(list1)

3 带 if 的列表推导式案例

需求:创建 0-10 的偶数列表

方法一:range() 步长实现

在这里插入代码片

list1 = [i for i in range(0, 10, 2)]
print(list1)

方法二:if实现

在这里插入代码片

list1 = [i for i in range(10) if i % 2 == 0]
print(list1)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想做程序猿的员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值