Python序列结构--元组
元组:轻量级列表
元组创建于元素访问
>>> x = (1, 2, 3)
>>> type(x)
<class 'tuple'>
>>> x[0]
1
>>> x[-1]
3
>>> x[1]
2
>>> x[1] = 4 # 元组是不可变的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> x = (3)
>>> x
3
>>> x[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable
>>> x = (3,) # 如果元组中只有一个元素,必须在后面多写个逗号
>>> x[0]
3
>>> x = ()
>>> x = tuple()
>>> tuple(range(5))
(0, 1, 2, 3, 4)
>>> list(enumerate(range(5)))
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
>>> list(zip(range(3),'abcdefg'))
[(0, 'a'), (1, 'b'), (2, 'c')]
元组于列表的异同点
相同点
列表和元组都属于有序序列,都支持使用双向索引访问其中的元素
不同的点
元组属于不可变序列,不可直接修改元组中的元素的值,也无法为元组增加和删除元素,从一定程度上讲,可以认为元组是轻量级列表,或者“常量列表”
>>> x = ([1,2],3)
>>> x[0][0] = 5 # 修改元组中列表元素
>>>
>>> x
([5, 2], 3)
>>> x[0].append(8) # 为元组中列表增加元素
>>> x
([5, 2, 8], 3)
>>> x[0] = x[0] + [10] # 试图修改元组的值,失败
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> x
([5, 2, 8], 3)
>>> x[0] += [10] # 抛出异常,但元组中的元素已被修改
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> x
([5, 2, 8, 10], 3)
>>> y = x[0]
>>> y
[5, 2, 8, 10]
>>> y += [11]
>>> y
[5, 2, 8, 10, 11]
>>> x
([5, 2, 8, 10, 11], 3)
>>> y = y + [12]
>>> y
[5, 2, 8, 10, 11, 12]
>>> x
([5, 2, 8, 10, 11], 3)
# x = x + [3] 和 x += [3]有本质区别
>>> x = [1,2]
>>> id(x)
2666094589960
>>> x += [3]>>> id(x)2666094589960>>> x[1, 2, 3]>>> x = x + [4]>>> x[1, 2, 3, 4]>>> id(x)2666094590600
作为不可变序列,与整数、字符串一样,元组可用字典的键,也可以作为集合的元素,内置函数hash()可以用来测试一个对象是否可哈希,如果对象不可哈希会抛出异常
>>> hash((1,)) # 元组、数字、字符串都是可哈希的
3430019387558
>>> hash(3)
3
>>> hash('hello world.')
-4516426368981041408
>>> hash([1,2]) # 列表不可哈希的
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
生成器推导式
生成器推导式也称为生成器表达式,在形式上生成器推导式使用圆括号作为定界符,生成器推导式的结果是一个生成器对象,可以将其转换为列表或者元组,也可以使用生成器对象的next()方法或者内置函数next()进行遍历,或者使用for循环来遍历其中的元素,只能从前往后正向访问其中的元素,没有任何方法可以再次访问已访问过的元素
>>> g = ((i+2)**2 for i in range(10)) # 创建生成器对象
>>> g
<generator object <genexpr> at 0x0000026CBF9E93B8>
>>> list(g) # 将生成器对象转换为列表
[4, 9, 16, 25, 36, 49, 64, 81, 100, 121]
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> g.__next__()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> g = ((i+2)**2 for i in range(10))
>>> g.__next__()
4
>>> g.__next__()
9
>>> next(g)
16
>>> next(g)
25
>>> g = ((i+2)**2 for i in range(10))
>>> tuple(g)
(4, 9, 16, 25, 36, 49, 64, 81, 100, 121)
>>> g = ((i+2)**2 for i in range(10))
>>> for item in g:
... print(item,end=' ')
...
4 9 16 25 36 49 64 81 100 121 >>>
>>> x = filter(None,range(10))>>> 1 in xTrue>>> 5 in xTrue>>> 2 in x # 不可再访问已经访问过的元素False>>> x = map(str,range(10))>>> '0' in xTrue>>> '0' in xFalse
Python序列结构--元组的更多相关文章
- Python序列结构
python中常用的序列结构由列表.元组.字典.字符串.集合等,列表.元组.字符串等有序序列以及range对象均支持双向索引 是否有序 序列结构 是否是可变序列 有序序列 元组 不可变序列 有序序列 ...
- python 序列结构-列表,元组,字典,字符串,集合
列表 """ name_list.__add__( name_list.__getslice__( name_list.__new__( name_list.append ...
- Python序列结构--集合
集合:元素之间不允许重复 集合属于Python无序可变序列,元素之间不允许重复 集合对象的创建与删除 直接将值赋值给变量即可创建一个集合 >>> a = {3,5}>>& ...
- Python序列结构--字典
字典:反映对应关系的映射类型 字典(dict)是包含若干“键:值”元素的无序可变序列 字典中元素的“键”可以是python中任意不可变数据,例如整数.实数.复数.字符串.元组等类型可哈希数据,“键”不 ...
- Python序列结构--列表(一)
列表 列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**.但插入和删除非尾部元素时涉及列表元素大量的移动 ...
- Python序列之元组 (tuple)
作者博文地址:http://www.cnblogs.com/spiritman/ Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号, ...
- python 序列:字符串、列表、元组
python 序列:字符串.列表.元组 序列:包含一定顺序排列的对象的一个结构 内建函数:str() list() tuple() 可以使用str(obj)可以把对象obj转换成字符串 list( ...
- 孤荷凌寒自学python第八天 初识Python的序列之元组
孤荷凌寒自学python第八天 Python的序列之元组 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步音频笔记:https://www.ximalaya.com/keji/19103 ...
- Python 序列、列表(List)、元组(Tuple)
序列 序列是Python中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...
随机推荐
- linux搭建zabbix server
一.linux配置jdk 1.安装rpm包,安装完成位置:/usr/java/jdk1.8.0_152 2.配置环境变量/etc/profile: JAVA_HOME=/usr/java/jdk1.. ...
- UDP广播 MAC地址
enduser_setup.start() ListenPort = wifi.setmode(wifi.STATIONAP) wifi.sta.autoconnect() clientid = wi ...
- 项目总结20:阿里云免费https证书申请
项目总结20:阿里云免费https证书申请 1. 登录阿里云控制台 www.aliyun.com,用账户信息登录 2. 在”产品与服务”搜索SSL,选择SSL证书 3. 点击购买证书 4. 选择” S ...
- 12条MySQL优化技巧
应用程序慢,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们也有莫大的关系. 程序中嵌入的一行行的SQL ...
- Centos7 出现Welcome to emergency mode!
做mount挂载时,修改了 /etc/fstab 文件,导致Centos7重启时出现如下图所示错误: Welcome to emergency mode! After logging in, typ ...
- MySQL:缓存算什么东西?!
原创: 码农翻身刘欣 十年前,我们还是一个企业内部的应用,用户不多,数据也不多. Tomcat一天也处理不了多少请求,闲得无聊的时候只能和我聊天,这是没有办法的事情,因为整个系统只有我们两个: 没错, ...
- map和list循环遍历
//map遍历(zmm是实体类) Map<String, zmm> maps = new HashMap<String, zmm>(); //给map存值: maps.put( ...
- java学习(三)
学号 20189214 <Java程序设计>第三周学习总结 教材学习内容总结 核心类 java.lang.Object 所有的类都直接派生自这个类. java.lang.String St ...
- git学习笔记:常用命令总结
本文根据廖雪峰的博客,记录下自己的学习笔记.主要记录常用的命令,包括仓库初始化.添加文件.提交修改.新建分支.内容暂存.分支管理.标签管理等内容. git是分布式版本控制系统. 首先是安装,从官网下载 ...
- Naïve Media Player
我的GitHub链接:https://github.com/Joyce45/hwt 一.播放器?怎么做? 提到播放器,首先想到的就是XAML控件库里的MediaElement,于是我又大致阅读了一下该 ...