龙空技术网

Python|元组的概念、构造和操作(操作符、函数、对象方法)

小智雅汇 719

前言:

现时各位老铁们对“二元组定义”都比较讲究,咱们都想要知道一些“二元组定义”的相关内容。那么小编同时在网络上汇集了一些对于“二元组定义””的相关知识,希望看官们能喜欢,兄弟们一起来了解一下吧!

元组(tuple)是Python一个常用的组合类型。

元组(tuple)是“只读版”(操作受限)的列表。与列表不同的是,元组在建立之后不能修改,结构不能改变(不能加入删除元素),其中的元素也不能改变(不能给元素赋值)。简言之,元组对象被创建之后,在其存在期间是不变的。当然,使用的符号也不同,用的是小括号,用逗号分隔元素(其实,定义元组的是逗号,而非括号)。

tuple格式:以括号作为识别符, 元素间以”,”分隔,末尾加不加”;”语法上都没错。

tup = (元素1, 元素2, 元素3,…); //()、;可省略

1 有了list,为什么需要tuple

元组(tuple)是“只读版”(操作受限)的列表,有时适当的限制是也有其益处的。

Tuple 比 list 操作速度快。如果您定义了一个值的常量集,并且唯一要用它做的是不断地遍历它,请使用 tuple 代替 list。

如果对不需要修改的数据进行 “写保护”,可以使代码更安全。使用 tuple 而不是 list 如同拥有一个隐含的 assert 语句,说明这一数据是常量。如果必须要改变这些值,则需要执行 tuple 到 list 的转换。

Tuple 可以转换成 list,反之亦然。内置的 tuple 函数接收一个 list,并返回一个有着相同元素的 tuple。而 list 函数接收一个 tuple 返回一个 list。从效果上看,tuple 冻结一个 list,而 list 解冻一个 tuple。

因为不能修改,所以其值是可以确定的,所以比list要安全,所以元组通常在让语句或用户定义的函数能够安全地采用一组值的时候使用。

2 元组的构造

2.1 用定义的直接描述创建元组

2.2 用类型名tuple()创建元组

创建空元组tup = (); 需要注意的是创建单元素元组的时候不可以写成tup=(1);,因为括号本身是运算符,该写法解释器无法正确识别,正确写法是tup = (1,)

3 元组的操作

元组虽然不能被修改,但如同列表list一样,可以被访问、被遍历、可以切片(截取)形成新的元组。因为元组tuple与列表list、字符串str同属python的序列类型,它们都可以完成一些相同的操作:《python|序列类型(list、tuple、str)支持的操作及简单实例》

下表就是关于python序列类型都支持的一些操作:包括操作符、内置函数、对象方法:

sn表达式说明

s、t 表示序列;

x 表示对象;

n 表示自然数(从0开始的非整数);

i、j 表示整数下标;1x in ss有元素等于x则结果为True,否则为False2s not in ss有元素等于x则结果为False,否则为True3s + ts和t的拼接序列4s*n 或 n*ss的n个拷贝的拼接5s[i]s的第i个元素,从0开始计6s[i:j]s的切片,从下标i到j的一段做出的序列,左闭右开的序列;7s[i:j:k]同上,且按步长k取元素8len(s)s的长度9min(s)s的最小元素10max(s)s的最大元素11s.index(x[,i[,j]])x在s里首次出现的下标,i、j表示起始、结束位置12s.count(x)x在s里出现的次数

tuple中的元素不能被删除,但可以使用del操作符删除整个元组。

虽然元组本身不能改变,但可以包含能改变的元素。当tuple中的元素为list时,虽然tuple的元素不能修改,但list的元素是可以修改的,这说明tuple的元素不变实际上指的是tuple元素的指针(或者地址)永远不变,而指针指向的内容是可以修改的。(按C语言的指针概念理解,元组包含的是一组常量指针)

4 元组的打包与拆包

元组的定义就是打包;

元组作为右值,左值有对应元素数量的变量时,就是拆包。

5 用元组实现函数形差与实参一对多的关系

函数使用带星号的形参,其实参可以是任意数量。

附源码:

tp1 = (1,2,3) # 用定义的直接描述创建元素

tp2 = 1,2,3 # 描述元组时也可以省略小括号

print(tp1,'\n',tp2)

tp3 = tuple(range(10)) # 用类型名创建元组

tp4 = tuple("abcde")

print(tp3,'\n',tp4)

print((),(1),(1,)) #空元组、单元素元组的写法

'''

(1, 2, 3)

(1, 2, 3)

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

('a', 'b', 'c', 'd', 'e')

() 1 (1,)

'''

u = tuple("abc")

v = (1,2,3)

w = u + v # 元组连接

tp5 = u,v # 元组嵌套

print(w,'\n',tp5)

for x in 1.68,2.71828,3.14159: #此处是省略小括号的元组

print(x)

# 内置函数enumerate()可以以可迭代对象为参数生成一个包含二元组的迭代器

seasons = ['Sprint','Summer','Fall','Winter']

li = list(enumerate(seasons))

tp6 = tuple(enumerate(seasons))

print(li,'\n',tp6)

'''

('a', 'b', 'c', 1, 2, 3)

(('a', 'b', 'c'), (1, 2, 3))

1.68

2.71828

3.14159

[(0, 'Sprint'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]

((0, 'Sprint'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter'))

'''

zoo = ('wolf', 'elephant', 'penguin')

print('Number of animals in the zoo is', len(zoo))

new_zoo = ('monkey', 'dolphin', zoo)

print('Number of animals in the new zoo is', len(new_zoo)) # 定义的第三个元素是元组

print('All animals in new zoo are', new_zoo)

print('Animals brought from old zoo are', new_zoo[2])

print('Last animal brought from old zoo is', new_zoo[2][2])

'''

Number of animals in the zoo is 3

Number of animals in the new zoo is 3

All animals in new zoo are ('monkey', 'dolphin', ('wolf', 'elephant', 'penguin'))

Animals brought from old zoo are ('wolf', 'elephant', 'penguin')

Last animal brought from old zoo is penguin

'''

t = (1,2,3),[4,5,6] # 虽然元组本身不能改变,但可以包含能改变的元素

print(t)

t[1][1] *= 10

print(t)

'''

((1, 2, 3), [4, 5, 6])

((1, 2, 3), [4, 50, 6])

'''

# 元组的打包与拆包

t2 = 'math', 'geography','history','computer' # 元组的定义就是打包

a,b,c,d = t2 # 元组作为右值,左值有对应元素数量的变量时,就是拆包

print(t2)

print(a,b,c,d)

print(type(a))

'''

('math', 'geography', 'history', 'computer')

math geography history computer

<class 'str'>

'''

# 函数的带星号形参,其实参可以是任意数量

def sums(*ar):

s = 0

for x in ar:

s += x

return s

print(sums(1,2,3,4,5), sums())

tt = 1,1,2,3,5,8,13 # tt的值是元组

lis = [1,7,11,13,17] # lis的值是列表

print(sums(*tt))

print(sums(*lis))

'''

15 0

33

49

'''

-End-

标签: #二元组定义