博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Python3] 012 元组:list,我们不一样!
阅读量:5262 次
发布时间:2019-06-14

本文共 3600 字,大约阅读时间需要 12 分钟。

目录


0. 元组的独白

  • 英文名:tuple
  • 可以把我看成是一个不可更改的 list
  • 有人说我是带上枷锁的 list,其实我是褪去稚气的 list,因为我懂得”守护“:在我元组里的元素,我一定护他周全!即人们所说的”不可修改“。

1. 元组的创建

# 例1.1t1_1 = ()t1_2 = (1,)t1_3 = 1,t1_4 = (1)print(type(t1_1))print(type(t1_2))print(type(t1_3))print(type(t1_4))
  • 运行结果

<class 'tuple'>

<class 'tuple'>

<class 'tuple'>

<class 'int'>


# 例1.2t1_5 = (1, 2, 3, 4, 5)t1_6 = ([1, 2, 3, 4, 5])t1_7 = tuple([1, 2, 3, 4, 5])print(type(t1_5))print(type(t1_6))print(type(t1_7))
  • 运行结果

<class 'tuple'>

<class 'list'>

<class 'tuple'>

t1_7 说明 tuple() 可以将列表转换为元组;其实 list() 也能将元组转换为列表。


# 例1.3t1_8 = tuple(1)
  • 运行结果

TypeError……'int' object is not iterable

逗号比括号要关键。


2. 元组的特性

(1) 概述

  • 元组是序列表,有序
  • 元组数据值相当于“只读”模式,即可以访问,不能修改
  • 元组数据值可以是任意类型
  • 与 list 仅一个区别:不可修改
  • 可以索引、分片、序列间计算、成员资格操作等

(2) 少废话,上例子

1) 索引

# 例2.1t2 = (1, 2, 3, 4, 5)print(t2[4])
  • 运行结果

5


# 例2.2 接着例2.1print(t2[10])
  • 运行结果

IndexError……tuple index out of range

索引值超标,报错。


2) 分片

# 例3.1t3_1 = (0, 1, 2, 3, 4, 5)t3_2 = t3_1[1::2]       # 从下标为 1 开始,索引至结尾;间隔为 1 print(id(t3_1))         # 习惯性看看 idprint(id(t3_2))print(t3_2)
  • 运行结果

1988512479944

1988536808648

(1, 3, 5)

分片是新开辟一片存储空间,存放数值。


# 例3.2 接着例3.1t3_3 = t3_1[2:100]print(t3_3)
  • 运行结果

(2, 3, 4, 5)

切片值右端可以超标。


3) 序列运算

# 例4.1 相加t4_1 = (1, 2, 3)t4_2 = (4, 5, 6)print(t4_1)print(id(t4_1))t4_1 = t4_1 + t4_2print(t4_1)print(id(t4_1))
  • 运行结果

(1, 2, 3)

1988536694824

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

1988536598056

此相加并不是对应下标的值进行数学上的加法,而是像“贪吃蛇”一样让一个元组的元素跟在另一个元组后面。

元组的“不可修改”,是对已有内容说的,其实元组可以“拉长”。

与其说是“相加”,不如说是“合并”。


# 例4.2 接着例4.1t4_1[1] = 100
  • 运行结果

TypeError……'tuple' object does not support item assignment

修改元组原有内容会报错。


# 例5 相乘t5 = (1, 2, 3)t5 = t5 * 3print(t5)
  • 运行结果

(1, 2, 3, 1, 2, 3, 1, 2, 3)


4) 成员检测

# 例6t6 = (1, 2, 3)if 2 in t6:    print("YES")else:    print("NO")if 6 in t6:    print("YES")else:    print("NO")
  • 运行结果

YES

NO


3. 元组的遍历

(1) 简单总结

  • 一般用 for
  • 会有嵌套

(2) 少废话,上例子

# 例7 单层元组遍历t7 = (1, 2, 3, "I", "am", "YorkFish")for i in t7:    print(i, end=' ')
  • 运行结果

1 2 3 I am YorkFish


# 例8.1 双层元组遍历t8 = ((1,2,3), (4,5,6), ("I","am","YorkFish"))for i in t8:    print(i)
  • 运行结果

(1, 2, 3)

(4, 5, 6)

('I', 'am', 'YorkFish')

有个小细节,t8 中的 (1,2,3) 等没空格,输出却有。


# 例8.2 接着例8.1for k,m,n in t8:    print(k,'--',m,'--',n)
  • 运行结果

1 -- 2 -- 3

4 -- 5 -- 6

I -- am -- YorkFish


4. 元组的内置方法

(1) 如何查看

  • help(tuple) / help(tuple())
    • help(tuple.index)
  • dir(tuple) / dir(tuple())

(2) 少废话,上例子

1) 计数君 count()

  • 与之前在字符串、列表中的用法类似
  • 计算指定数据在元组中出现的次数
# 例9t9 = (0, 1, 2, 3, 6, 6, 6, 9, 4)print(t9.count(6))
  • 运行结果

3


2) 索引君 index()

  • 与之前在字符串、列表中的用法类似
  • 索引指定元素在元组中的位置
# 例10.1t10 = (0, 1, 2, 3, 6, 6, 6, 9, 4)print(t10.index(3))print(t10.index(6))
  • 运行结果

3

4

若索引值在元组中有多个,则返回下标值最小的。


# 例10.2print(t10.index(20))
  • 运行结果

ValueError……tuple.index(x): x not in tuple

若索引值不存在于该元组,会报错。


5. 可供元组使用的别的方法

  • 有人说“函数”,有人说“方法”

(1) 测量君

# 例11 len()t11 = (1, 2, 3, 4, 5)print(len(t11))     # 测得元组的长度
  • 运行结果

5


(2) 最值双子

# 例12.1 max() 与 min()t12 = (2, 6, 4, 8 ,12, 6, 78, 6)print(max(t12))print(min(t12))
  • 运行结果

78

2

  • 挖坑,编号 Py012-1
    • 若元组中有多个最值,则实际打印出哪个?如何得知?

(3) 清除大师

# 例13 del()t13 = (1, 2, 3, 4, 5)print(t13)del(t13)print(t13)
  • 运行结果

(1, 2, 3, 4, 5)

NameError……name 't13' is not defined

报错说 t13 没有被定义,也就是说 t13 被删除了。


6. 非要改元组中的值怎么办?(翻车现场)

  • 可利用列表,其实是改了“第二层的内容”
# 例14t14 = (1, [2,3,4], 5)t14[1][2] = 10      # 修改t14[1].append(20)   # 追加print(t14)
  • 运行结果

(1, [2, 3, 10, 20], 5)


# 例15 伪插入t15 = ("YorkFish", "Green Arrow", "Canary")t15 = t15[:2] + ("Supergirl",) + t15[2:]    # t15 有种推翻重来的感觉print(t15)
  • 运行结果

('YorkFish', 'Green Arrow', 'Supergirl', 'Canary')

不要把 t15[2:] 偷懒成 t15[-1],会报错,因为 t15[-1] 是字符串而不是元组。


# 例16 伪删除t16 = ('YorkFish', 'Green Arrow', 'Supergirl', 'Canary')t16 = t16[:1] + t16[2:]print(t16)
  • 运行结果

('YorkFish', 'Supergirl', 'Canary')

转载于:https://www.cnblogs.com/yorkyu/p/10279814.html

你可能感兴趣的文章
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
整理推荐的CSS属性书写顺序
查看>>
ServerSocket和Socket通信
查看>>
css & input type & search icon
查看>>
源代码的下载和编译读后感
查看>>
Kafka学习笔记
查看>>
Octotree Chrome安装与使用方法
查看>>
Windows 环境下基于 Redis 的 Celery 任务调度模块的实现
查看>>
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>