zoukankan      html  css  js  c++  java
  • python3 入门 (二) 列表的使用

    列表用于组织其它数值,即写在方括号之间、用逗号分隔开的数值列表。列表内的项目不必全是相同的类型。

    列表的定义

    1 student = ['Tom', 'Jack', 'Avril']

    添加元素

    • 将另一个列表直接赋值给该列表
    • 使用"[头下标:尾下标]"j将另一个列表的指定元素值拷贝至该列表
    • 使用"+"连接符,将元素添加至列表末尾
    • 使用" * "乘号得到多个相同元素
    • 使用append方法,将元素添加至列表末尾
    • 使用extend方法,将元素添加至列表末尾
    • 使用insert方法,将元素插入至指定位置
     1 student = ['Tom', 'Jack', 'Avril']
     2 student *= 3
     3 print(student)  #['Tom', 'Jack', 'Avril', 'Tom', 'Jack', 'Avril', 'Tom', 'Jack', 'Avril']
     4 
     5 
     6 # student中变量为name值的复制
     7 name = ['Jerry', 'Lucy']
     8 student = name[:]
     9 print(student)  # ['Jerry', 'Lucy']
    10 name.clear()
    11 print(student)  # ['Jerry', 'Lucy']
    12 
    13 
    14 # *得到的每一相同项指向同一内存地址
    15 name = ['Jerry']*3
    16 print(name)  # ['Jerry', 'Jerry', 'Jerry']
    17 print(id(name[0]))  # 54580088
    18 print(id(name[1]))  # 54580088
    19 print(id(name[2]))  # 54580088
    20 
    21 
    22 # name2与name1指向同一内存地址
    23 name1 = ['Jerry']
    24 name2 = name1
    25 print(name2)  # ['Jerry']
    26 name1.clear()
    27 print(name2)  # []
    28 
    29 # student中变量为name值的复制,与name不指向同一内存地址
    30 name = ['Jerry']
    31 student = name*3
    32 print(student)  # ['Jerry', 'Jerry', 'Jerry']
    33 name.clear()
    34 print(student)  # ['Jerry', 'Jerry', 'Jerry']
    35 
    36 
    37 # append添加后,student中的['Jerry']与name变量指向同一内存地址
    38 student = ['Tom', 'Jack', 'Avril']
    39 name = ['Jerry']
    40 student.append(name)
    41 print(student)  # ['Tom', 'Jack', 'Avril', ['Jerry']]
    42 name.clear()
    43 print(student)  # ['Tom', 'Jack', 'Avril', []]
    44 
    45 
    46 # 与name变量不指向同一内存地址
    47 student = ['Tom', 'Jack', 'Avril']
    48 name = 'Jerry'
    49 student.append(name)
    50 print(student)  # ['Tom', 'Jack', 'Avril', 'Jerry']
    51 del name
    52 print(student)  # ['Tom', 'Jack', 'Avril', 'Jerry']
    53 
    54 
    55 # 同上,insert插入后,student中的['Jerry']与name变量指向同一内存地址
    56 student = ['Tom', 'Jack', 'Avril']
    57 name = ['Jerry']
    58 student.insert(1, name)
    59 print(student)  # ['Tom', ['Jerry'], 'Jack', 'Avril']
    60 name.clear()
    61 print(student)   # ['Tom', [], 'Jack', 'Avril']
    62 
    63 
    64 # 与name变量不指向同一内存地址
    65 student = ['Tom', 'Jack', 'Avril']
    66 name = 'Jerry'
    67 student.insert(1, name)
    68 print(student)  # ['Tom', 'Jerry', 'Jack', 'Avril']
    69 del name
    70 print(student)  # ['Tom', 'Jerry', 'Jack', 'Avril']
    71 
    72 
    73 # extend添加后,student中的['Jerry']为name值的复制
    74 student = ['Tom', 'Jack', 'Avril']
    75 name = ['Jerry']
    76 student.extend(name)
    77 print(student)  # ['Tom', 'Jack', 'Avril', 'Jerry']
    78 name.clear()
    79 print(student)  # ['Tom', 'Jack', 'Avril', 'Jerry']
    80 
    81 
    82 student = ['Tom', 'Jack', 'Avril']
    83 name = 'Jerry'
    84 student.extend(name)
    85 print(student)  # ['Tom', 'Jack', 'Avril', 'J', 'e', 'r', 'r', 'y']
    86 del name
    87 print(student)  # ['Tom', 'Jack', 'Avril', 'J', 'e', 'r', 'r', 'y']

      

    删除元素

    • 使用remove方法删除指定值的元素
    • 使用pop方法弹出栈顶元素,返回弹出元素
    • 使用del关键字删除指定位置元素
    • 使用clear方法清空列表元素,等于del a[:]
     1 # 删除指定值的元素
     2 student = ['Tom', 'Jack', 'Avril']
     3 student.remove('Tom')
     4 print(student)
     5 
     6 # 弹出栈顶元素
     7 student = ['Tom', 'Jack', 'Avril']
     8 s = student.pop()
     9 print(s)
    10 print(student)
    11 
    12 # 删除指定位置元素
    13 student = ['Tom', 'Jack', 'Avril']
    14 del student[1]
    15 print(student)

     其他操作:

    list.index(x) 返回列表中第一个值为 x 的元素的索引。如果没有匹配的元素就会返回一个错误
    list.count(x) 返回 x 在列表中出现的次数
    list.sort() 对列表中的元素进行排序。参数reverse默认为False,从小到大排序,设置为True则为从大到小排序
    list.reverse() 倒排列表中的元素
    list.copy() 返回列表的浅复制(变量值的复制),等于list[:]

    列表推导式

    列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

    每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

    将列表中每个数值乘三,获得一个新的列表:

    >>> num = [1, 2, 3]
    >>> [3*n for n in num]
    [3, 6, 9]

    可以用 if 子句作为过滤器:

    >>> num = [1, 2, 3]
    >>> [3*n for n in num if n > 2]
    [9]
    >>> [3*n for n in numif n < 3]
    [3,6]

    其他用法:

    >>> vec1 = [2, 4, 6]
    >>> vec2 = [4, 3, -9]
    >>> [x*y for x in vec1 for y in vec2]
    [8, 6, -18, 16, 12, -36, 24, 18, -54]
    
    >>> [vec1[i]*vec2[i] for i in range(len(vec1))]
    [8, 12, -54]

    用列表推导式实现矩阵转置:

     1 # 矩阵转置
     2 matrix = [
     3     [1, 2, 3],
     4     [4, 5, 6],
     5     [7, 8, 9],
     6     [10, 11, 12]
     7 ]
     8 
     9 # 方法一
    10 newMatrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
    11 print(newMatrix)
    12 
    13 # 方法二
    14 newMatrix = []
    15 for i in range(len(matrix[0])):
    16     newMatrix.append([row[i] for row in matrix])
    17 print(newMatrix)
    18 
    19 # 方法三
    20 newMatrix = []
    21 for i in range(len(matrix[0])):
    22     newRow = []
    23     for oldRow in matrix:
    24         newRow.append(oldRow[i])
    25     newMatrix.append(newRow)
    26 print(newMatrix)
  • 相关阅读:
    中介者模式
    观察者模式
    javascript深入理解js闭包
    外观模式
    模板方法模式
    浅析C#深拷贝与浅拷贝
    C#浅拷贝与深拷贝区别
    6个重要的.NET概念:栈,堆,值类型,引用类型,装箱,拆箱
    原型模式
    设计模式总结
  • 原文地址:https://www.cnblogs.com/z941030/p/4831978.html
Copyright © 2011-2022 走看看