zoukankan      html  css  js  c++  java
  • 第013讲:元组:戴上了枷锁的列表

    一 元组

    1 定义:Python 的元组与列表类似,不同之处在于元组的元素不能修改。

    2 元组的创建:在括号中添加元素,并使用逗号隔开即可,eg:tuple1 = (1,2,3,4,5,6,7)

    • 创建一个空元组:tuple1 = ()
    • 创建一个只有一个元素的元组:tuple2 = (2,)   或者 tuple2 = 2,
      • 注意:一定要加“逗号”,否则如果表达式为tuple2 = (2),创建的变量tuple2并不是一个元组,而是一个整型变量
    • 创建多个元素的元组:tuple3 = 2,3,4,5,6
      • 总结:元组的标志性符号是逗号而不是小括号,所以逗号一定不能省
      • 例子:在IDE里面分别输入“8*(8)” 和“8*(8,)”查看结果

    3 元组的访问:元组可以使用下标索引来访问元组中的值,eg:tuple1[0]

    4 元组的切片:跟列表一样,也是使用冒号,eg:tuple1[:]    tuple1[1:5]   tuple1[2:]  tuple1[:5]

    5 元组的删除:

    • 元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组,eg: del tuple1
      • 注意:一般很少使用del来删除元组,因为python有回收器,把元组的标签摘除之后,静态的元组数据就会自动被回收器回收或者销毁
    • 可以用切片的方式单独删除元组的元素(其实是创建了一个新元组)

    6元组的更新:元组中的元素值是不允许修改的,但我们可以对元组进行连接组合,即把原来的元组切片,然后再把原来的元组和新的数据拼接起来

    • 注意:要被拼接的新数据逗号和括号都不能省(不然会被当成其他类型的数据没办法拼接吧)

    eg:

    >>> num = (1,2,3,5,6,7)
    >>> num = num[:3]+(4,)+num[3:]
    >>> num
    (1, 2, 3, 4, 5, 6, 7)

    在上述例子当中,原来的元组(1,2,3,5,6,7)是没有被改变的,只是num这个标签重新指向了新的元组(1,2,3,4,5,6,7),不久之后python的回收器就会把没有标签的元组(1,2,3,5,6,7)给扔掉或者销毁,新的元组会被保留。

    7 元组相关操作符:

    • 拼接操作符:+
    • 重复操作符:*
    • 关系操作符:>  <  >=  <=  ==  != 
    • 成员操作符:in  或  not in
    • 逻辑操作符: and or

    二 课后作业

    0. 请用一句话描述什么是列表?再用一句话描述什么是元组?
    列表:一个大仓库,你可以随时往里边添加和删除任何东西。
    元组:封闭的列表,一旦定义,就不可改变(不能添加、删除或修改)。
      
      
    1. 什么情况下你需要使用元组而不是列表?
    当我们希望内容不被轻易改写的时候,我们使用元组(把权力关进牢笼)。
    当我们需要频繁修改数据,我们使用列表。
      
      
    2. 当元组和列表掉下水,你会救谁?
    如果是我,我会救列表,因为列表提供了比元组更丰富的内置方法,这相当大的提高了编程的灵活性。
    回头来看下元组,元组固然安全,但元组一定创建就无法修改(除非通过新建一个元组来间接修改,但这就带来了消耗),而我们人是经常摇摆不定的,所以元组只有在特殊的情况才用到,平时还是列表用的多。
    综上所述,小甲鱼会救列表(列表是美眉)。

    我的答案:让它们自生自灭吧,哈哈哈哈哈哈哈哈哈^_^
      
    3. 请将左边列表的内置方法与右边的注释连线,并圈出元组可以使用的方法。
      
     
    看吧,元组果然比较悲剧吧,仅有两个方法元组可以使用,其他方法都不行,不信你试试?
      
      
    4. 创建一个元组,什么情况下逗号和小括号必须同时存在,缺一不可?
    在拼接只有一个元素的元组的时候,例如我们课上举的例题:

    >>> temp = (‘小甲鱼’, ‘黑夜’, ‘迷途’, ‘小布丁’)
    # 如果我想在“黑夜”和“迷途”之间插入“怡静”,我们应该:
    >>> temp = temp[:2] + (‘怡静’,) + temp[2:]

    我的答案:创建一个只有一个元素的数组——错了,这种情况可以没有括号的!!!!,不过方便起见,还是加括号吧



    5. x, y, z = 1, 2, 3 请问x, y, z是元组吗?
    所有的多对象的、逗号分隔的、没有明确用符号定义的这些集合默认的类型都是元组,自己在IDLE中键入以下代码,并体会一下:

    >>> x, y, z = 1, 2, 3
    >>> type(x)
    >>> h = x, y, z
    >>> type(h)

    我的答案:不是——错了,我以为它会分别给x,y,z三个变量赋值,啊C语言里面好像是这个意思吧,混了混了


    6. 请写出以下情景中应该使用列表还是元组来保存数据:

    1) 游戏中角色的属性:列表
      我的答案:元组,我看到了属性以为信息是固定的,不用再添加什么,没注意游戏角色

    2) 你的身份证信息:元组
      
    3) 论坛的会员:列表
      
    4) 团队合作开发程序,传递给一个你并不了解具体实现的函数的参数:元组
      我的答案:我以为在了解程序功能的时候,为了弄清楚它的作用会需要通过不同的参数来验证,所以答的是列表;实际情况原来这种东西不能轻易修改

    5) 航天火箭各个组件的具体配置参数:元组
      
    6) NASA系统中记录已经发现的行星数据:列表



    7. 上节课我们通过课后作业的形式学习到了“列表推导式”,那请问如果我把中括号改为小括号,会不会得到“元组推导式”呢?自己动手试试看再看答案哦^_^
    Python3 木有“元组推导式”,为嘛?没必要丫,有了“列表推导式”已经足够了。
    那为什么“>>> tuple1 = (x**2 for x in range(10))”不会报错?
    因为你误打误撞得到了一个生成器:

    >>> type(tuple1)
    <class 'generator'>

    关于生成器的概念小甲鱼今后会细讲,你可以尝试这么去访问我们刚刚的生成器:

    # 注意,Python3 开始 next() 方法改为 __next__() 哦~
    >>> tuple1.__next__()
    0
    >>> tuple1.__next__()
    1
    >>> tuple1.__next__()
    4
    >>> tuple1.__next__()
    9
    >>> tuple1.__next__()
    16
    >>> tuple1.__next__()
    25
    >>> tuple1.__next__()
    36
  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/luoxun/p/13231008.html
Copyright © 2011-2022 走看看