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中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...
随机推荐
- poj2528(线段树+离散化)
题目链接:https://vjudge.net/problem/POJ-2528 题意:在区间[1,1e7]内染色,依次染n(<=1e4)中颜色,给出每种颜色染色的范围,可重叠,求最终有多少种颜 ...
- (5)Linux权限管理
1.文件权限 2.1)文件类型 d:目录 -:文件 l:链接文件 b:可以存储的接口设备 c:串行端口设备(键盘,鼠标) 2)文件属性 接下来的九个字符以三个为一组分别是 rw ...
- http/2.0与http/1.1的区别
http/2是http协议自1999年http1.1发布后的首个更新 主要基于SPDY协议 2.0 采用二进制 而不是文本格式 完全多路复用 而不是有序并阻塞的 只需要一个连接即可实现并行 使 ...
- SQL Server 异常解决:语句被终止。完成执行语句前已用完最大递归 100。
问题出现业务场景: 我司有个缺料分析报表,有一个字段是适用机种,需要通过BOM递归读取顶层父物料.这个错就是缺料分析报表执行时报的错: 原因分析定位: 通过网上一些资料,猜测应该是某个递归查询语句,遇 ...
- Linux 学习笔记 1
1. 名词解释 GNU: 目标是创建一套完全自由的操作系统:包含了可自由使用的软件,如Emacs,GCC,Tex,X Window:制定了3个自由软件协议:GPL,LGPL,GFDL GPL(Gen ...
- ERRORS !MySQL 和 Javaweb 的报错合集
ERROR:1175. You are using safe update mode and you tried to update a table without a WHERE that uses ...
- MySQL联接查询算法(NLJ、BNL、BKA、HashJoin)
一.联接过程介绍 为了后面一些测试案例,我们事先创建了两张表,表数据如下: 1 2 3 4 CREATE TABLE t1 (m1 int, n1 char(1)); CREATE TABLE t ...
- window下mongodb的安装和环境搭建
一.下载安装包或者压缩包 1.下载 mongodb官网社区版下载页面 开发者一般使用社区版即可 3.6.3版本仅支持64位版本 2.安装 mongo compass是一个图形界面管理工具,安装过程非常 ...
- python爬虫知识脉络
- PYTHON基础入门(内置函数、推导式)学习
**内建函数**1.通过使用dir()函数可以列出所具备的方法 例:num = 10 dir(num) 例:myList = [1,2,3,4,5,6] dir(num)2.通过使用help()函数可 ...