Python编程
完成条件
元组(Tuple)
在 Python 中,元组与列表类似,区别在于元组一旦创建就不可更改(即不可变)。具有可哈希元素的元组是可哈希的,因此可以作为字典的键或集合的成员。
概述
Python 中元组的基本用法:
tup1 = (1, 'a')
tup2 = 1, 'a # 不需要括号
tup3 = (1,) # 单元素元组
tup4 = 1, # 不带括号的单元素元组
tup5 = () # 空元组
list1 = [1, 'a']
it1, it2 = tup1 # 解包,按值分配
print(tup1 == tup2) # True
print(tup1 is tup2) # False
print(tup1 == list1) # False
print(tup1 == tuple(list1)) # True
print(list(tup1) == list1) # True
print(tup1[0]) # 第一个元素
for item in tup1:
print(item) # 迭代
print((1, 2) + (3, 4)) # (1, 2, 3, 4)
print(tup1 * 2) # (1, 'a', 1, 'a')
tup1 += (3,) # 元组和字符串连接的方式相似
print(tup1) # (1, 'a', 3), 尽管是不可变的
# * 从文档中引用: "对于不可变目标(如字符串、数字和元组),更新后的值会计算出来,但不会赋值回输入变量。"
print(len(tup1)) # 元素数量
print(3 in tup1) # 成员测试 - True
tup6 = ([1, 2],)
tup6[0][0] = 3
print(tup6) # 元组中的列表是可变的
set1 = set((1, 2)) # 可以放入集合
#set1 = set(([1, 2], 2)) # 错误:列表使其变为不可哈希
def foo():
return 6, 9 # 返回多个值,作为一个元组
r1, r2 = foo() # 接收多个值
print(f'r1 is {r1}, r2 is {r2}')
元组的语法
元组可以直接创建或从列表转换。通常,元组使用圆括号括起来。
l = [1, 'a', [6, 3.14]]
t = (1, 'a', [6, 3.14])
print(t)
(1, 'a', [6, 3.14])
tuple(l)
(1, 'a', [6, 3.14])
t == tuple(l)
True
t == l
False
单元素元组
单元素元组通过元素后加逗号并用括号包围来创建:
t = ('A single item tuple',)
print(t)
('A single item tuple',)
打包和解包
你可以使用元组进行多重赋值:
article, noun, verb, adjective, direct_object = ('A', 'tuple', 'needs', 'no', 'parens')
print(noun) # 输出 'tuple'
"元组解包" 就是将元组解开并将其值分配给左边的变量。相反的操作是 "元组打包",即 t = article, noun, verb,
adjective, direct_object
。
元组操作
元组操作与列表类似,但不允许给索引或切片赋值,并且没有 "append" 操作符。
a = (1, 2)
b = (3, 4)
print(a + b) # (1, 2, 3, 4)
print(a) # (1, 2)
print(b) # (3, 4)
# 尝试 append 操作会报错
a.append(3) # 报错:'tuple' object has no attribute 'append'
# 不能修改元组中的元素
a[0] = 0 # 报错:object does not support item assignment
print(a) # (1, 2)
对于列表来说,以上代码可以正常运行。
元组的属性
元组的长度可以使用 len()
方法来获取:
print(len((1, 2, 3))) # 3
a = (1, 2, 3, 4)
print(len(a)) # 4
类型转换
将列表转换为元组:
l = [4, 5, 6]
print(tuple(l)) # (4, 5, 6)
将元组转换为列表:
t = (4, 5, 6)
print(list(t)) # [4, 5, 6]
字典也可以通过 items()
方法转换为元组的元组:
d = {'a': 1, 'b': 2}
print(tuple(d.items())) # (('a', 1), ('b', 2))
元组的用途
元组可以代替列表使用,尤其是在项的数量已知且较少的情况下,例如当从函数返回多个值时。许多其他编程语言需要创建一个对象或容器来返回多个值,但在 Python 中,通过元组赋值,多个返回值变得非常简单:
def func(x, y):
# 计算 x 和 y
return x, y
x, y = func(1, 2)
使用列表推导式处理元组元素
有时需要在元组中操作其值并创建一个新元组。例如,如果我们想将元组中的所有值都乘以 2,可以结合使用列表推导式和元组操作:
def double(T):
'double() - 返回一个包含每个元组元素乘以 2 的元组。'
return tuple([e * 2 for e in T])
练习
- 创建列表
['a', 'b', 'c']
,然后从该列表创建一个元组。 - 创建元组
('a', 'b', 'c')
,然后从该元组创建一个列表。 - 在一行代码中同时创建
a = 'a'
,b=2
,c='gamma'
。 - 创建一个仅包含单个元素的元组,该元素是一个包含三个元素 'a', 'b' 和 'c' 的元组。通过使用
len()
函数验证该元组的长度是否为 1。
最后修改: 2025年01月30日 星期四 23:37