Python入门
文章目录
3.3元组
元组与列表类似,也是由一系列按特定顺序排列的元素组成的,但它们的主要区别在于列表是可变序列,元组是不可变序列,即元组中的元素不可以单独修改,而列表中的元素可以任意修改。
3.3.1元组的创建和删除
-
使用赋值运算符直接创建元组
tuplename = (element1,element2,element3...)
注:创建列表使用方括号[],创建元组使用圆括号()。
但实际上,圆括号并不是必须的,只要将一组值用逗号隔开,python就认为它是元组。
tuplename = element1,element2,element3...
如果要创建的元组只包括一个元素则需要在定义元组时,在元素后面加一个逗号
verse= ("abc",) #输出verse ('abc',) 元组 verse= ("abc") #输出verse abc 字符串 #可使用type()函数测试变量类型
-
创建空元组
emptytuple= ()
空元组可以应用于为函数传递一个空值或者返回空值。
-
创建数值元组
可以使用tuple()函数直接将range()函数循环出来的结果转换为数值元组,还可使用range()外的其他对象创建元组
tuple(data)
tuple(range(10,20,2)) #(10, 12, 14, 16, 18)
-
删除元组
del tuplename
3.3.2访问元组元素
tuplename[3]
tuplename[:3] #切片方式
for element in tuplename:
print(element) #for循环遍历
for index,item in enumerate(tuolename): #for循环和enumerate()函数结合遍历
...
3.3.3修改元组元素
元组是不可变的序列,不能对它的单个元素进行修改。但是我们可以对整个元组进行重新赋值。
可对元组进行连接组合,并且连接的内容必须是元组。
3.3.4元组推导式
使用元组推导式可快速生成一个元组,它的表现形式和列表推导式类似,只是将[]改为()。
import random #导入random标准库
randomnumber = (random.randint(10,100) for i in range(10))
print("生成的元组为:",randomnumber)
#生成的元组为:<generator object <genexpr> at 0x000001AD183AEE40>
由上面的结果可看出,使用元组推导式生成的并不是一个元组或者列表,而是一个生成器对象,这一点和列表推导式是不同的。要使用该生成器对象可以将其转换诶元组或者列表,转换为元组使用tuple()函数,转换为列表使用list()函数。
import random #导入random标准库
randomnumber= (random.randint(10,100) for i in range(10))
randomnumber = tuple(randomnumber) #转换为元组
print("转换后:",ranmdomnumber)
#转换后:(21, 52, 92, 23, 78, 42, 50, 80, 83, 76)
要使用通过元组推导式生成的生成器对象,还可以直接通过for循环遍历或者直接使用__ next() __方法进行遍历。
number= (i for i in range(3))
print(number.__next__()) #输出第1个元素
print(number.__next__()) #输出第2个元素
print(number.__next__()) #输出第3个元素
number =tuple(number) #转换为元组
print("转换为:",number)
'''
0
1
2
转换后:()
'''
number= (i for i in range(4)) #生成生成器对象
for i in number: #遍历生成器对象
print(i,end=' ') #输出每个元素的值
print(tuple(number)) #转换为元组输出
# 0 1 2 3 ()
从上面两个实例可看出,无论使用哪种方法遍历后,如果还想再使用该生成器对象,都必须重新创建一个生成器对象,因为遍历后原生成器对象已经不存在了。
3.4元组与列表的区别
简单理解:
列表类似于我们用铅笔写下的内容,写错了还可以擦掉。
元组类似于我们用钢笔写下的内容,写错了就擦不掉了,除非换一张纸重写。
- 列表属于可变序列,它的元素可以随时被修改或者删除;而元组属于不可变序列,其中的元素不可以被修改,只能被整体替换。
- 列表可以使用append(),extend(),remove(),insert()和pop()等方法实现添加和修改元素;元组则没有这几个方法,因为不能在元组中添加和修改元素,同样,也不能删除元素。
- 可以使用切片访问和修改列表中的元素。元组也支持切片,但是它只能通过切片访问元组中的元素,不支持修改。
- 元组比列表的访问和处理速度快。所以如果只需要对其中的元素进行访问,而不进行任何修改,建议使用元组而不使用列表。
- 列表不能作为字典的键,元组则可以。