元组:轻量级列表

元组创建于元素访问

>>> 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序列结构--元组的更多相关文章

  1. Python序列结构

    python中常用的序列结构由列表.元组.字典.字符串.集合等,列表.元组.字符串等有序序列以及range对象均支持双向索引 是否有序 序列结构 是否是可变序列 有序序列 元组 不可变序列 有序序列 ...

  2. python 序列结构-列表,元组,字典,字符串,集合

    列表 """ name_list.__add__( name_list.__getslice__( name_list.__new__( name_list.append ...

  3. Python序列结构--集合

    集合:元素之间不允许重复 集合属于Python无序可变序列,元素之间不允许重复 集合对象的创建与删除 直接将值赋值给变量即可创建一个集合 >>> a = {3,5}>>& ...

  4. Python序列结构--字典

    字典:反映对应关系的映射类型 字典(dict)是包含若干“键:值”元素的无序可变序列 字典中元素的“键”可以是python中任意不可变数据,例如整数.实数.复数.字符串.元组等类型可哈希数据,“键”不 ...

  5. Python序列结构--列表(一)

    列表 列表**包含若干元素的有序连续内存空间**,当列表增加或删除元素时,**列表对象自动进行内存的扩展或收缩**,从而**保证相邻元素之间没有缝隙**.但插入和删除非尾部元素时涉及列表元素大量的移动 ...

  6. Python序列之元组 (tuple)

    作者博文地址:http://www.cnblogs.com/spiritman/ Python的元组与列表类似,同样可通过索引访问,支持异构,任意嵌套.不同之处在于元组的元素不能修改.元组使用小括号, ...

  7. python 序列:字符串、列表、元组

    python 序列:字符串.列表.元组   序列:包含一定顺序排列的对象的一个结构 内建函数:str() list() tuple() 可以使用str(obj)可以把对象obj转换成字符串 list( ...

  8. 孤荷凌寒自学python第八天 初识Python的序列之元组

    孤荷凌寒自学python第八天 Python的序列之元组 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) (同步音频笔记:https://www.ximalaya.com/keji/19103 ...

  9. Python 序列、列表(List)、元组(Tuple)

    序列 序列是Python中最基本的数据结构,包括字符串.列表.元组. 序列,顾名思义,是有序的,序列都有索引,都能进行索引.切片(截取).加(连接).乘(倍增).检查成员的操作. 因为序列有序,可通过 ...

随机推荐

  1. Selenium 实现nvsm查询和输出ksql语句

    测试环境:http://nvsm.cnki.net/kns/brief/result.aspx?dbprefix=SCDB 程序功能:对各个文献库的高级检索功能,输入检索条件做检索,提取加密的ksql ...

  2. 大数据学习笔记4 - Hadoop的优化与发展(Hadoop 2.0)

    前面介绍了Hadoop核心组件HDFS和MapReduce,Hadoop发展之初在架构设计和应用性能方面仍然存在不足,Hadoop的优化与发展一方面体现在两个核心组件的架构设计改进,一方面体现在Had ...

  3. 19-02【mac电脑操作】最小化应用程序

    最小化应用程序 windows下很简单,直接使用windows+M即可: mac电脑下,官方建议是:option+command+m+h.但实际使用的时候,这个快捷键并不好使: 解决方案:mac系统设 ...

  4. ios下,<input type="checkbox"> 点击时出现黑色块

    ios下,<input type="checkbox"> 点击时出现黑色块如下图 解决方法:

  5. Vue的从入门到放弃

    此贴仅记录vue学习路程中遇见的大大小小,形形色色的问题 1.  vue自动打开浏览器配置: 当使用vue 脚手架搭建项目后启动npm run dev,会出现 但是不会自动打开浏览器的,这时候去con ...

  6. 在centos7 部署bbr

    How to Deploy Google BBR on CentOS 7 Published on: Thu, Jan 5, 2017 at 6:34 pm EST CentOS Linux Guid ...

  7. MR执行环境有两种

    本地测试环境(windows): 在windows的hadoop目录bin目录有一个winutils.exe 1.在windows下配置hadoop的环境变量 2.拷贝debug工具(winutils ...

  8. experiment 3

    #include <stdio.h> int main() { int number, max, min, n; n=; printf("请输入%d个数: ", n); ...

  9. 修改pudb颜色

    2019-02-19,18点20vim调整颜色vim ~/.vimrc 这个pudb的配色用上的方法改不了.调试状态时候按o和回车能切换console和调试界面. 成功了.通过修改pudb源代码来实现 ...

  10. 推荐一款Notepad++主题Dracula

    https://draculatheme.com/notepad-plus-plus/ Activating theme Go to %AppData%\Notepad++\themes Place  ...