DataWhale_python训练营task4-2

文章目录

  • 一.Task05:元组(1天)
    • 1. 元组(tuple)的定义、创建和访问
        • 1.1 元组的定义
        • 1.2 元组的创建
        • 1.3 元组的访问
    • 2. 更新和删除一个元组
    • 3. 元组相关的操作符
    • 4. 内置方法
    • 5. 解压元组
    • 练习题

一.Task05:元组(1天)

理论部分

  • 掌握元组定义,熟悉创建和访问元组
  • 熟悉更新和删除元组
  • 了解元组相关的操作符和内置方法,以及解压元组

练习部分

  • 课后思考题
  • 知识扩展

1. 元组(tuple)的定义、创建和访问

1.1 元组的定义

「元组」定义语法为: (元素1, 元素2, …, 元素n)

  • 中括号括住所有元素
  • 逗号分隔元素

元组(tuple)与列表类似,也是有序序列容器,但元组创建之后就无法被修改

1.2 元组的创建

可以使用()或者直接用,隔开来创建元组(为了程序的可读性,使用``()`)。

t1 = (1, 10.31, 'python')
t2 = 1, 10.31, 'python'
print(t1, type(t1))
# (1, 10.31, 'python') 
print(t2, type(t2))
# (1, 10.31, 'python') 

注意:当元组只有一个元素时,需要在元素后面加一个逗号,否则会作为运算符处理。(例:(0))

a = (0)
print(type(a))
# 
a = (0,)
print(type(a))
# 

*也可用于元组的重复,与列表类似,元组也可具有多维。

 x = 3 * (1,2,3)
print(x)
# (1, 2, 3, 1, 2, 3, 1, 2, 3)
x = 3 * ((1,2,3),)
print(x)
# ((1, 2, 3), (1, 2, 3), (1, 2, 3))

补充:比较一下容器数据类型的创建。

容器数据类型 创建空容器 创建含有元素的容器
列表 x = [] x = [1,2,3]
元组 x = () x = (1,2,3)
字典 x = {} x = {1:a,2:b,3:c}
集合 x = set() x.add(obj)
字符串 x = '' x = "123"

由于集合也为大括号{},所以在空集合创建时与空字典相同,为了区别就是用set()l来表示空集合。

1.3 元组的访问

元组与列表相似,也可通过索引(获得单个元素)和切片(获得子元组)访问。

x = 3 * ((1,2,3),)
print(x) # ((1, 2, 3), (1, 2, 3), (1, 2, 3))
print(x[0]) # (1, 2, 3)
print(x[0][1]) # 2
print(x[1][0:2]) # (1, 2)

注意:虽然各种容器的创建时所采用的括号类型不同,但是在访问容器时都是采用中括号[]进行访问。

2. 更新和删除一个元组

概念:元组具有不可更改(immutable)的性质,这里的不可更改是指无法通过赋值语句更改元组内的元素。但倘若元组内的元素是可更改的(如列表),那就可以更改元组中的元素。

x = (1, 2, 3, [4, 5, 6])
print(t1) # (1, 2, 3, [4, 5, 6])
t1[3][0] = 9
print(t1) # (1, 2, 3, [9, 5, 6])
# ---------------------------错误示范
t1[0] = 9 # 元组无法使用赋值语句

t1[3]是一个列表,将列表的第一项改为9是可行的。
另外,可以通过整体更改来对元组重新更新。=的右边整体构成一个新元组,赋值给week变量。

week = ('Monday', 'Tuesday', 'Thursday', 'Friday')
week = week[:2] + ('Wednesday',) + week[2:]
print(week) # ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')

3. 元组相关的操作符

  • 比较操作符
  • 逻辑操作符
  • 连接操作符 +
  • 重复操作符 *
  • 成员关系操作符 innot in

4. 内置方法

  • tuple.count(obj) 是记录在元组中该元素出现几次。
  • tuple.index(obj) 是找到该元素在元组的第一个索引。
t = 8 * (1,2,3)
print(t) # (1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3)
print(t.index(1)) # 0
print(t.count(1)) # 8

5. 解压元组

解压元组的标准就是左边结构需要与元组相同。
解压(unpack)一维元组(有几个元素左边括号定义几个变量)。

t = (1, 10.31, 'python')
(a, b, c) = t
print(a, b, c)
# 1 10.31 python

解压二维元组也一样,需要左边结构与元组结构相同。

t = (1, 10.31, ('OK', 'python'))
(a, b, (c, d)) = t
print(a, b, c, d)

通配符「*」,英文叫 wildcard,在计算机语言中代表一个或多个元素。
如果只取出元组其中几个元素,可以将把不需要的元素丢给了 rest 变量, *rest代表占了多个位置,以列表形式储存 。

t = 1, 2, 3, 4, 5
a, b, *rest, c = t
print(a, b, c)  # 1 2 5
print(rest)  # [3, 4]

如果你根本不在乎 rest 变量,那么就用通配符*加上下划线_,下划线代表一个变量。

a, b, *_ = t
print(a, b)  # 1 2

练习题

1、元组概念
写出下面代码的执行结果和最终结果的类型。

(1, 2)*2        # (1, 2, 1, 2)
(1, )*2         # (1, 1)
(1)*2           # 2

分析为什么会出现这样的结果。


*对于元组来说是重复操作符,所以1,2行的结果为元组。
(1)的括号是作为运算符,类型为int,1*2 = 2。


2、拆包过程是什么?

a, b = 1, 2

上述过程属于拆包吗?可迭代对象拆包时,怎么赋值给占位符?


拆包过程是指利用一句赋值语句按顺序将元组中的各元素赋值给=左边的各个变量。
上述过程属于拆包,1, 2已经定义了一个元组,与左边结构相对应,可以算作解压元组。
在可迭代对象拆包时,使用_(单个元素),*_(连续多个元素)进行占位。


你可能感兴趣的:(python,列表)