当前位置:   article > 正文

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

用列表推导式创建元组

一. 元组的引入

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

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

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

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

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

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

在这里插入代码片

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

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5

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')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3 元组的常见操作

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

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

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5

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

在这里插入代码片

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


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5

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

在这里插入代码片

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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

三.元组和列表的区别

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

方法2 for循环实现

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

方法3 列表推导式实现

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5

3 带 if 的列表推导式案例

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

方法一:range() 步长实现

在这里插入代码片

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

  • 1
  • 2
  • 3
  • 4
  • 5

方法二:if实现

在这里插入代码片

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


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/117001
推荐阅读
相关标签
  

闽ICP备14008679号