閑人壹のPython笔记.2021.08.05 · 元组

元组(tuple)

元组 是 Python 的另一个重要的序列结构,即:不可表列表。元组的所有元素都放在一对小括号 “()” 内,之间用逗号 “,” 间隔,可以将整数、实数、字符串、列表、元组等任何类型的内容放在同一列表中,元素之间没有任何关系。

元组 与 列表 的区别:

在这里插入图片描述

1.元组 的 创建和删除

  1. 使用赋值运算符,与列表基本相同只是 “[ ]" 变成了 “( )”

    元组名 = (元素1,元素2,元素3,……,元素n)
    

    实例:

    yuan = (1,3,5,"瞒天过海","围魏救赵",'a',("明修栈道","暗渡陈仓"),'N',["借刀杀人","以逸待劳"])	# 创建元组
    lie = [1,3,5,"瞒天过海","围魏救赵",'a',("明修栈道","暗渡陈仓"),'N',["借刀杀人","以逸待劳"]] #创建列表
    print("元组1 的内容:",yuan)
    print("元组1 的类型:",type(yuan))	# 显示 yuan 数据类型
    print("列表1 的内容:",lie)
    print("列表1 的类型:",type(lie))		# 显示 lie 的数据类型
    
    
    输出结果:
    元组1 的内容: (1, 3, 5, '瞒天过海', '围魏救赵', 'a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳'])
    元组1 的类型: <class 'tuple'>
    列表1 的内容: [1, 3, 5, '瞒天过海', '围魏救赵', 'a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳']]
    列表1 的类型: <class 'list'>
    
  2. 创建空元组

    元组名 = ()
    
  3. 创建数值元组

    语法:

    元组名 = (data)
    

    参数说明:

    • data – 可转换为元组的数据,其类型可以是 range 对象、字符串、元组或者其他可迭代类型的数据。

    实例:

    创建一个 0 到 10 之间所有可整除 3 的数的元组:

    yuan = tuple(range(3,11,3))		# 通过 range() 创建数列,并用 tuple() 转化为元组
    print(yuan)
    
    输出结果:
    (3, 6, 9)
    

    函数说明:

    tuple() 函数将列表转换为元组。

    语法:

    tuple( iterable )
    

    参数说明:

    • iterable – 要转换为元组的可迭代序列。
  4. 删除元组 - del

    del 元组名
    

    此功能一般用不到,原因和删除列表一样,Python 有清理机制会自动清除无用的列表和元组。

2.访问元组元素

  1. 直接使用 print() ,实例如下:
yuan = (1,3,5,"瞒天过海","围魏救赵",'a',("明修栈道","暗渡陈仓"),'N',["借刀杀人","以逸待劳"])
print("元组1 的内容:",yuan)
print("元组1 的类型:",type(yuan))
print("显示元组前半段:",yuan[:4])		# 显示元组的索引4之前的元素
print("显示元组后半段:",yuan[5:])		# 显示元组的索引5之后的元素
print(yuan[0],"",type(yuan[0]))		 # 显示元组的第一个元素及数据类型
print(yuan[3],"",type(yuan[3]))
print(yuan[6],"",type(yuan[6]))
print(yuan[8],"",type(yuan[8]))
print(yuan[7],"",type(yuan[7]))

输出结果:
元组1 的内容: (1, 3, 5, '瞒天过海', '围魏救赵', 'a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳'])
元组1 的类型: <class 'tuple'>
显示元组前半段: (1, 3, 5, '瞒天过海')
显示元组后半段: ('a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳'])
1  <class 'int'>
瞒天过海  <class 'str'>
('明修栈道', '暗渡陈仓')  <class 'tuple'>
['借刀杀人', '以逸待劳']  <class 'list'>
N  <class 'str'>
  1. 两种遍历方法,与遍历列表一样,实例如下:

    yuan = (1,3,5,"瞒天过海","围魏救赵",'a',("明修栈道","暗渡陈仓"),'N',["借刀杀人","以逸待劳"])
    print("元组1 的内容:",yuan)	# 遍历元组 yuan
    for i in yuan:
        print(i)
    print("元组1 的内容:",yuan)	# 遍历元组 yuan
    for x,y in enumerate(yuan):
        print(x+1,".",y)
        
    输出结果:
    元组1 的内容: (1, 3, 5, '瞒天过海', '围魏救赵', 'a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳'])
    1
    3
    5
    瞒天过海
    围魏救赵
    a
    ('明修栈道', '暗渡陈仓')
    N
    ['借刀杀人', '以逸待劳']
    元组1 的内容: (1, 3, 5, '瞒天过海', '围魏救赵', 'a', ('明修栈道', '暗渡陈仓'), 'N', ['借刀杀人', '以逸待劳'])
    1 . 1
    2 . 3
    3 . 5
    4 . 瞒天过海
    5 . 围魏救赵
    6 . a
    7 . ('明修栈道', '暗渡陈仓')
    8 . N
    9 . ['借刀杀人', '以逸待劳']
    

3.修改元组元素

元组是 不可变序列,对于元组元素的修改只能对整个元组重新赋值,或者添加元素,且在添加元素时只能添加一个元组,不能直接添加其他对象

  1. 实例1,将 yuan 中 “以逸待劳”,“趁火打劫” ,替换为 “明修栈道”,“暗渡陈仓”:

    yuan = ("瞒天过海","围魏救赵","借刀杀人","以逸待劳","趁火打劫")
    print("元组1 的内容:",yuan)
    yuan = ("瞒天过海","围魏救赵","借刀杀人","明修栈道","暗渡陈仓")  # 重新赋值 yuan,替换 "以逸待劳","趁火打劫"
    print("修改后元组1 的内容:",yuan)
    
    输出结果:
    元组1 的内容: ('瞒天过海', '围魏救赵', '借刀杀人', '以逸待劳', '趁火打劫')
    修改后元组1 的内容: ('瞒天过海', '围魏救赵', '借刀杀人', '明修栈道', '暗渡陈仓')
    
  2. 实例2,在 yuan 添加 “明修栈道”,“暗渡陈仓”:

    yuan = ("瞒天过海","围魏救赵","借刀杀人")
    print("元组1 的内容:",yuan)
    yuan = yuan + ("明修栈道","暗渡陈仓")  # 将 ("明修栈道","暗渡陈仓") 添加入 yuan
    print("修改后元组1 的内容:",yuan)
    
    输出结果:
    元组1 的内容: ('瞒天过海', '围魏救赵', '借刀杀人')
    修改后元组1 的内容: ('瞒天过海', '围魏救赵', '借刀杀人', '明修栈道', '暗渡陈仓')
    

4.元组推导式

元组推导式 作用 和 表现形式 与 列表推导式 一样,只是把 “[ ]” 变成了 “()”.

以列表推导式实例,生成一个包含 5 个数的随机数的元组,范围在 10 ~ 100 之间:

import random		# 导入生成随机数模块 random
yuan = (random.randint(10,100) for i in range(5)) # 按条件创建元组
print ("随机数元组:",yuan)

输出结果:
随机数元组: <generator object <genexpr> at 0x00000252843FB430>
# 代码直接输出里一个生成器对象,需要使用 tuple() 函数进行转换才能正常显示出元组。

补充代码:
print ("随机数列:",tuple(yuan))

输出结果:
随机数列: <generator object <genexpr> at 0x000001E159A8B430>
随机数列: (16, 31, 27, 14, 32)

使用 for 进行遍历,转换生成器对象:
yuan = (random.randint(10,100) for i in range(5)) # 按条件创建元组
for i in yuan:
    print(i,end=" ")	# 显示 yuan 中所有数值
print(tuple(yuan))		# 显示 元组 yuan

输出结果:
95 16 62 19 25 ()
# 由于生成器对象中的数据被读取后就会清空,所有最后输出的元组 yuan 为空元组

__next__() 方法,转换生成器对象:
yuan = (random.randint(10,100) for i in range(5)) # 按条件创建元组
print(yuan.__next__())
print(yuan.__next__())
print(yuan.__next__())
print(yuan.__next__())
print(yuan.__next__())
yuan = tuple(yuan)
print(yuan)

输出结果:
66
72
47
15
21
()

next方法:返回迭代器的下一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值