0. 元组的独白

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

1. 元组的创建

# 例1.1

t1_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.2

t1_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.3

t1_8 = tuple(1)
  • 运行结果

TypeError……'int' object is not iterable

逗号比括号要关键。


2. 元组的特性

(1) 概述

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

(2) 少废话,上例子

1) 索引

# 例2.1

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

5


# 例2.2 接着例2.1

print(t2[10])
  • 运行结果

IndexError……tuple index out of range

索引值超标,报错。


2) 分片

# 例3.1

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

1988512479944

1988536808648

(1, 3, 5)

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


# 例3.2 接着例3.1

t3_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_2
print(t4_1)
print(id(t4_1))
  • 运行结果

(1, 2, 3)

1988536694824

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

1988536598056

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

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

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


# 例4.2 接着例4.1

t4_1[1] = 100
  • 运行结果

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

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


# 例5 相乘

t5 = (1, 2, 3)
t5 = t5 * 3
print(t5)
  • 运行结果

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


4) 成员检测

# 例6

t6 = (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.1

for 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()

  • 与之前在字符串、列表中的用法类似
  • 计算指定数据在元组中出现的次数
# 例9

t9 = (0, 1, 2, 3, 6, 6, 6, 9, 4)
print(t9.count(6))
  • 运行结果

3


2) 索引君 index()

  • 与之前在字符串、列表中的用法类似
  • 索引指定元素在元组中的位置
# 例10.1

t10 = (0, 1, 2, 3, 6, 6, 6, 9, 4)
print(t10.index(3))
print(t10.index(6))
  • 运行结果

3

4

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


# 例10.2

print(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. 非要改元组中的值怎么办?(翻车现场)

  • 可利用列表,其实是改了“第二层的内容”
# 例14

t14 = (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')

[Python3] 012 元组:list,我们不一样!的更多相关文章

  1. python3.x元组打印错误 TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'

    原创by南山南北秋悲 欢迎引用!请注明原地址:http://www.cnblogs.com/hwd9654/p/5676746.html  谢谢! TypeError: unsupported ope ...

  2. Python3 数据类型-元组

    Python 的元组与列表类似,不同之处在于元组的元素不能修改. 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. 实例1(Python3.0+): tu ...

  3. python3:tuple元组

    https://www.runoob.com/python3/python3-tuple.html 元组使用小括号,列表使用方括号. 元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可. Py ...

  4. 一起入门python3之元组和数列

    这一节我们来说一下,元组(tupe)&数列(list).每天苦逼的工作不易啊,哎.不过呢一腔热血学习.哈哈哈哈 #井号代表注释哈. 0x01 数列-list        数列可以说是一种集合 ...

  5. Python3 的元组

    元组(tuple):戴上了枷锁的列表 元组与列表非常相似但是元组内元素的类型相同,且元组内的元素不能修改 1.创建元组的方法 与列表不同创建元组大部分情况下是用小括号,例如 tuple1=(1,2,3 ...

  6. python3.5 元组

    1.创建元祖 tup1 = ('jenkins','mysql') print(tup1) ssh://root@192.168.0.204:22/usr/bin/python -u /home/pr ...

  7. (03)-Python3之--元组(tuple)操作

    1.定义 元组的关键字:tuple 元组以()括起来,数据之间用 , 隔开.元组当中的数据,可以是任意类型.数值是可以重复的. 元组元素是 不可变的,顺序是 有序的. 例如: b = ("萝 ...

  8. Python - 元组(tuple) 详解 及 代码

    元组(tuple) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17290967 元组是存放任意元素集合,不能修 ...

  9. 零基础入门学习Python(13)--元组:戴上了枷锁的列表

    前言 这节课我们讨论主题是元祖:我们有个小标题戴上了枷锁的列表 我们都知道早在300多年前,孟德斯鸠在变法的时候说过,一切拥有权力的人都容易被滥用权力,这是万古不变的一条经验.但是呢,凡是拥有大权利的 ...

随机推荐

  1. 安装vue-cli脚手架项目

    1,下载安装node.官网下载后,重新打开cmd再打开. 命令:node -v检测版本. 2,安装vue-cli: 命令:npm install --global vue-cli  .根据安装情况,会 ...

  2. 【BZOJ2200】道路和航线(并查集,拓扑排序,最短路)

    题意:n个点,有m1条双向边,m2条单向边,双向边边长非负,单向边可能为负 保证如果有一条从x到y的单项边,则不可能存在从y到x的路径 问从S出发到其他所有点的最短路 n<=25000,n1,m ...

  3. (18)C++项目练习一(功能会不断扩展)--------【聊天工具】

    1.准备使用Qt和C++做一个远程(基于互联网的)聊天工具,需要实现以下功能 (1)多对多聊天功能 (2)文件传输功能 (3)注册.登录功能 (4)加好友.同意好友功能 (5)好友列表.黑名单功能(分 ...

  4. (16)Python3.5+Pyqt5+PyCharm+Opencv3.3+Qtdesigner开发环境配置

    一:Python3.3和Pyqt5的安装 注意:两个的版本一定要对应,一定要对应,一定要对应,重要的事情说三遍. 因为我自己的电脑是64位的,所以我下载的都是64位版本的,且都是3.5版本的:这两个一 ...

  5. [CSP-S模拟测试]:飘雪圣域(莫队)

    题目描述 $IcePrincess\text{_}1968$和$IcePrince\text{_}1968$长大了,他们开始协助国王$IceKing\text{_}1968$管理国内事物. $IceP ...

  6. [CSP-S模拟测试]:骆驼(模拟+构造)

    题目描述 我们都熟悉走马步,现在我们定义一种新的移动方式——骆驼步,它在一个国际棋盘上的移动规则是这样的. 以看出,骆驼步可以向八个方向走动,且不能走出棋盘范围. 现在给出一个$N\times N$的 ...

  7. vue路由实例

    router.js: import Vue from 'vue' import Router from 'vue-router' import Home from '@/components/Home ...

  8. 对象数组(JSON) 根据某个共同字段 分组

    1.在前端页面用js处理 转载https://www.cnblogs.com/rysinal/p/5834446.html 为了第二种方法对比,特意把id 转化为pid var arr = [ {&q ...

  9. 回望2017,基于深度学习的NLP研究大盘点

    回望2017,基于深度学习的NLP研究大盘点 雷锋网 百家号01-0110:31 雷锋网 AI 科技评论按:本文是一篇发布于 tryolabs 的文章,作者 Javier Couto 针对 2017 ...

  10. centos 6.x 安装配置 node.js 环境

    下载 可以在本地下载node.js最新版,然后通过ftp工具上传到服务器,或者直接在服务器终端使用wget命令下载(我当时下载的是node-v6.11.3-linux-x64版本,其他版本请查看上面链 ...