Python数据类型之元祖

python中有一个很奇怪的数据类型-----元祖(tuple),元祖由括号()表示,被称为只读列表,顾名思义,元祖可以看成一个列表,但是只有查询的操作。

1、元祖的创建

# 元祖的创建
# -*- coding:utf-8 -*-
# author: kenny

# 元祖的创建
# 创建方法一:多个元素情况,我们可以直接创建(不推荐)
tuple_1 = 1, 2, 3, 4
print(tuple_1)  # (1, 2, 3, 4)
# 创建方法二:用tuple()创建
tuple_2 = tuple((1, 2, 3, 4, 5))
print(tuple_2)  # (1, 2, 3, 4, 5)
# 创建方法三:用()创建
tuple_3 = (1, 2, 3, 4, 5, 6)
print(tuple_3)  # (1, 2, 3, 4, 5, 6)

需要注意的是,元祖都是一组一组的,单个元素不能创建为元祖,此时数据的类型为单个元素本身的类型。如果想创建单个元素的元祖,需要在创建的时候在元素后面加逗号,如下例:

tuple_4 = (1)
print(type(tuple_4))  # <class 'int'>
tuple_5 = ("1001")
print(type(tuple_5))  # <class 'str'>
tuple_6 = ("1002",)
print(type(tuple_6))  # <class 'tuple'>

2、元祖的查询

tuple_7 = (1, 2, ['a', 'b', 'c'], 'd', 'e', ('name', 'city'))
# 打印索引为0的元素
print ("tuple_7[0] =", tuple_7[0])  # tuple_7[0] = 1

# 切片:从索引为1到最后一个元素
print ("tuple_7[1:] =", tuple_7[1:])   # tuple_7[1:] = (2, ['a', 'b', 'c'], 'd', 'e', ('name', 'city'))

# 切片:从第一个元素到倒是第二个元素
print ("tuple_7[:-1] =", tuple_7[:-1])  # tuple_7[:-1] = (1, 2, ['a', 'b', 'c'], 'd', 'e')

# 等价于tuple_7[1:]   从左到右一个个去取,步长为1
print ("tuple_7[1::1] =", tuple_7[1::1])  # tuple_7[1::1] = (2, ['a', 'b', 'c'], 'd', 'e', ('name', 'city'))

# 反向输出 步长为1
print ("tuple_7[::-1]", tuple_7[::-1])   # tuple_7[::-1] (('name', 'city'), 'e', 'd', ['a', 'b', 'c'], 2, 1)

# 反向输出 步长为2(隔一个去取))
print ("tuple_7[::-2]", tuple_7[::-2])   # tuple_7[::-2] (('name', 'city'), 'd', 2)

# 统计元素个数
print(tuple_7.count("2"))  # 0

#  返回元素的索引位置
print(tuple_7.index(2))  # 1

# 计算元组中元素的个数
print(len(tuple_7))  # 6

之所以说元祖很奇怪,是因为元祖本身是不可变数据,即元祖一旦被定义,数据便不能被修改了,但是有时候我们会看到有些操作可以元祖的数据,例如下面的例子:

tuple_8 = (1, "a", ["list_1", 2])
print(tuple_8)  # (1, 'a', ['list_1', 2])
tuple_8[2].append("list_add")
print(tuple_8)  # (1, 'a', ['list_1', 2, 'list_add'])

这是为什么呢,不是说元祖一旦被确定,数据就不能被修改了吗。其实元祖不能被修改是简单的说法,全称是元祖内元素在内存中的地址不能被修改,就如上个例子,与其说是元祖的数据被修改,不如说是元祖内的列表的数据被修改,因为列表是可变数据,修改列表的数据后列表的地址不变,所以元祖来说地址并没有发生变化。

3、删除元祖

咦?不是说元祖只有查询操作吗?为什么又能删除了呢?对于这一点疑问,我想说的是:这不是删除元祖的元素,而是删除元祖这个对象(好吧,只是我凑字数来了)

tuple_9 = (1, "a", ["list_1", 2])
print(tuple_9)  # (1, 'a', ['list_1', 2])
del tuple_9
print(tuple_9)  # NameError: name 'tuple_9' is not defined

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值