python数据结构:tuple(元组)

Posted Hub-Link

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python数据结构:tuple(元组)相关的知识,希望对你有一定的参考价值。

一、定义元组

上篇文章我们知道了字符串是一种序列,它可以迭代循环,也可以按索引访问,也可以切片访问。但它的组成只能是单个的字符,现在来介绍一种更多元化的序列:元组,英文叫tuple

1.1、定义元组
t = ('My', 'age', 'is', 18)

在这个元组中包含了3个字符串,一个整形数字,元组中的每一项称作元素,4个元素按照从左到右的顺序排列

1.2、用下标索引访问
t[0] # 'my'
t[3] = t[-1] # 18

也可以通过切片来访问,注意切片返回的是一个包含切片片段的新元组

t[0:2] # ('My', 'age')

1.3、不用括号定义元组
t = 'My', 'age', 'is', 18

但当,元组中只有一个元素的时候,必须要加一个逗号

t = ('solo',# 或者不带括号
t = 'solo',
1.4、序列强制转换为元组
tuple('abc') # ('a', 'b', 'c')
tuple(range(5)) # (0, 1, 2, 3, 4)

二、元组操作

2.1、元组拼接

函数join(),可以把元组这样的序列拼接成一个整体的字符串

t1 = ('My', 'age', 'is', 29)
" ".join(t1)
## 报错
t2 = ('My', 'age', 'is', "29")
" ".join(t2)
## 结果 'My age is 29'

注意最后一个元素,这次我们将它设置成了字符串,因为join函数要求参数序列中的每一个元素都必须是字符串

2.2、元组函数
2.2.1、count,index 函数

count() 函数 统计元组内相关元素的个数

index() 函数 返回相关元素的下标值,如果有相同的元素,返回下标最小

t = ('a', 'b', 'b', 'c')
t.count('a') # 2
t.index('b') # 1
t.index('d') # Error
# 查看长度
len(t) # 4

2.2.2 元组也支持 in 操作
t = ('a', 'a', 'b', 'c')

'a' in t # True
'x' in t # False

注意:元组和字符串都是只读的,也就是不可修改的。我们不能单独改变元组中的某个元素,或者是字符串中的某个字符

三、遍历元组

3.1、使用for循环遍历
lst = list(range(10))
for i in lst:
    print(i)
3.2、使用while循环遍历
lst = list(range(10))
i = 0
while i < 10:
    print(lst[i])
    i += 1

四、综合案例:销售数据统计-销冠

在真实的项目中,数据结构通常是比较复杂,经常碰到嵌套的元组,甚至是多层嵌套,我们来看一个例子

这是包含某公司所有销售人员第一季度销售业绩的元组,单位是万元,其中的每一个元素对应一个销售 人员的信息,人员信息也是一个元组,包括姓名和业绩,业绩又是一个元组,按照顺序分别是1、2、3 月份的销售额。

需求:找出总销售额最高的那个员工,并将他的名字和总销售额输出

# 当元组元素较多、较长时,可以这样书写
sales = (
    ("Peter", (78, 70, 65)),
    ("John", (88, 80, 85)),
    ("Tony", (90, 99, 95)),
    ("Henry", (80, 70, 55)),
    ("Mike", (95, 90, 95)),
)
4.1、方式一
champion = '' # 冠军名称
max_amount = 0 #最大销量
for sale in sales:
    name = sale[0]
    quarter_amount = sale[1]
    total_amount = 0
    for month_amount in quarter_amount:
        total_amount += month_amount
    if total_amount > max_amount:
        max_amount = total_amount
        champion = name
print("第一季度的销冠是%s, 他的总销售额是%d万元" % (champion, max_amount))
## 结果: 第一季度的销冠是Tony, 他的总销售额是284万元
4.2、方式二
champion = '' # 冠军名称
max_amount = 0 #最大销量
for name,quarter_amount in sales:
    total_amount = sum(quarter_amount)
    if total_amount > max_amount:
        champion,max_amount = name,total_amount
print("第一季度的销冠是%s, 他的总销售额是%d万元" % (champion, max_amount))
## 结果: 第一季度的销冠是Tony, 他的总销售额是284万元

以上是关于python数据结构:tuple(元组)的主要内容,如果未能解决你的问题,请参考以下文章

python数据结构:tuple(元组)

老Python带你从浅入深探究Tuple

Python之元组

python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?

[python]python之tuple元组

Python基础-python数据类型之元祖字典