zoukankan      html  css  js  c++  java
  • Python基础(二)—列表和元组

    List&Tuple

    List是一个可变序列类型。因此,您可以通过添加或删除元素来更改给定的列表。元组是不变序列类型。你不能换一个元组。所以你必须创建一个新的。

    • List
      • 创建:listTmp = [] , listTmp = [‘listtmp’, 2017, 2018, 2019]
      • 访问:通过下标进行访问(和字符串同样可以使用切片),listTmp[0] , listTmp[1,3]
      • 增加:append()、或者通过下标进行组合新增或删除等操作。listTmp.append(2020) # ‘listtmp’, 2017, 2018, 2019, 2020
      • 删除:listTmp.pop()(该方法默认删除最后一个)、 listTmp.remove(2018)(移除列表中某个值的第一个匹配项)、 del listTmp2
        listTmp = [2, 5, 7, '2019', '2010', 'ABCD']
        print(listTmp.pop())
      
        listTmp.remove(7)
        print(listTmp)
      
        del listTmp[2]
        print(listTmp)
        '''
        ABCD
        [2, 5, '2019', '2010']
        [2, 5, '2010']
        '''
      
      
    • Tuple
      • 创建:tupleTmp = () , tupleTmp = (‘listtmp’, 2017, 2018, 2019)
      • 访问:通过下标进行访问(和字符串同样可以使用切片),tupleTmp[0] , tupleTmp[1,3]
      • 增加:元组中的元素值是不允许修改的,但我们可以对元组进行连接组合。
      • 删除:元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组。
        tupleTmp = ('loak', 2017, 2018, 2019)
      
        print(tupleTmp[0])
        tupleTest = 1
        newTuple = tupleTmp + (tupleTest,)  # 元组中的元素只能连接组合进行增加
        print(newTuple)'
      
        del tupleTmp
      
      

    列表和元组的运算

    • 列表
      列表对 + 和 * 的操作符与字符串相似。+ 号用于组合列表,* 号用于重复列表。
    Python 表达式结果描述
    len([1, 2, 3])3长度
    [1, 2, 3] + [4, 5, 6][1, 2, 3, 4, 5, 6]组合
    [‘Hi!’] * 4[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]重复
    3 in [1, 2, 3]True元素是否存在于列表中
    for x in [1, 2, 3]: print(x, end=" ")1 2 3迭代
    • 元组
      与字符串一样,元组之间可以使用 + 号和 * 号进行运算。这就意味着他们可以组合和复制,运算后会生成一个新的元组。
    Python 表达式结果描述
    len((1, 2, 3))3计算元素个数
    (1, 2, 3) + (4, 5, 6)(1, 2, 3, 4, 5, 6)连接
    (‘Hi!’,) * 4(‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’)复制
    3 in (1, 2, 3)True元素是否存在
    for x in (1, 2, 3): print (x,)1 2 3迭代

    内置函数

    • 列表
    序号函数描述
    1len(list)列表元素个数
    2max(list)、min(list)返回列表元素最大、最小值
    3list(seq)将元组转换为列表
    4list.append(obj)在列表末尾添加新的对象
    5list.count()统计某个元素在列表中出现的次数
    6list.extend(seq)在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
    7list.index(obj)从列表中找出某个值第一个匹配项的索引位置
    8list.insert(index, obj)将对象插入列表
    9list.pop([index=-1])移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
    10list.remove(obj)移除列表中某个值的第一个匹配项
    11list.reverse()反向列表中元素
    12list.sort( key=None, reverse=False)对原列表进行排序
    13list.clear()清空列表
    14list.copy()复制列表
    • 元组
    序号函数描述
    1len(tuple)计算元组元素个数
    2max(tuple)、min(tuple)返回元组元素最大、最小小值
    3tuple(seq)将列表转换为元组

    关于列表和元组的深浅复制

    • Python对象和变量的管理
      Python没有C语言中的变量。在C语言中,变量不止是个名字,它是字节集合并真实存在于内存某个位置上。而在Python中,变量仅仅是指向对象的标签。
        a = [1, 2, 3]  # 表示我们创建了一个指引指向列表[1, 2, 3],但是a不是列表
      
        b = a  # 此时并没有复制a所指引的列表。我们只是创建了一个新的标签b,然后将其指向a所指向的列表。如果修改a,那你就同时修改了b,因为它们指向同一个列表。
      
        # 可以使用内建函数id()可以返回对象的唯一id。该id是对象的内存地址。
        c = []
        print(id(a))
        print(id(b))
        print(id(c))
        '''输出:
          10784000
          10784000
          10304448
        '''
      

    浅复制.png

    • 五种复制方式的比较

        import copy
        a = [[1], 2, 3]
        b = a[:]
        c = list(a)
        d = a * 1
        e = copy.copy(a)
        f = copy.deepcopy(a)
      
        a[0].append(4)
      
        print('a                ', id(a), a)
        print('a[:]             ', id(b), b)
        print('list(a)          ', id(c), c)
        print('a * 1            ', id(d), d)
        print('copy.copy(a)     ', id(e), e)
        print('copy.deepcopy(a) ', id(f), f)
        '''
          a                 9303824 [[1, 4], 2, 3]
          a[:]              9304864 [[1, 4], 2, 3]
          list(a)           9004416 [[1, 4], 2, 3]
          a * 1             9304824 [[1, 4], 2, 3]
          copy.copy(a)      9304784 [[1, 4], 2, 3]
          copy.deepcopy(a)  9304744 [[1], 2, 3]
        '''
      

      从以上可以看出,使用 a[:], list(a), a*1, copy.copy(a)四种方式复制列表结果都可以得到一个新的列表,但是如果列表中含有列表,所有b, c, d, e四个新列表的子列表都是指引到同一个对象上。只有使用copy.deepcopy(a)方法得到的新列表f才是包括子列表在内的完全复制。

    • 深复制

      • 列表深复制:a[:]、list(list)、copy.deepcopy(a)
        上例为浅复制,如果需要深复制a指引的列表。我们必须创建新的列表,然后使用变量来指引它。可以使用切片a[:]或者list(list)来实现全复制。当使用copy.copy(a)时,如果a中嵌套有列表,则嵌套的列表是浅复制。

          a = [1, 2, 3]
        
          b = a[:]
          # b = list(a)
          # import copy
          # b = copy.deepcopy(a)
          print(id(a))  # 10652928
          print(id(b))  # 10653408  使用a[:]已成功复制
        
        
      • 其他注意事项
        还接受生成器。切片笔记法不适用于生成器,因为生成器是不可更改。因此不能generator[0]。

          >>> generator = (x * 3 for x in range(4))
          >>> list(generator)
          [0, 3, 6, 9]
        
        

        百分之九十的切片标记法都可以被list()代替。下次你看见[:]的时候试试使用list()替代,这样可以让代码更加可读。

        复制内容参照文章

    个人博客:Loak 正 - 关注人工智能及互联网的个人博客
    文章地址:Python基础(二)—列表和元组

  • 相关阅读:
    Oracle 基本命令
    一个完整的创建用户,创建表空间,授权建表过程
    jQueryMobile之Popup
    data-theme 几种值的样式
    jQueryMobile之listview
    jQueryMobile之弹出对话框
    android EditText内嵌图片
    css 盒子模型
    kms可用激活服务器地址|kms可用激活服务器分享
    本地配置DNS服务器(MAC版)
  • 原文地址:https://www.cnblogs.com/l0zh/p/13739761.html
Copyright © 2011-2022 走看看