列表用于组织其它数值,即写在方括号之间、用逗号分隔开的数值列表。列表内的项目不必全是相同的类型。
列表的定义
student = ['Tom', 'Jack', 'Avril']
添加元素
student = ['Tom', 'Jack', 'Avril'] student *= 3 print(student) #['Tom', 'Jack', 'Avril', 'Tom', 'Jack', 'Avril', 'Tom', 'Jack', 'Avril'] # student中变量为name值的复制 name = ['Jerry', 'Lucy'] student = name[:] print(student) # ['Jerry', 'Lucy'] name.clear() print(student) # ['Jerry', 'Lucy'] # *得到的每一相同项指向同一内存地址 name = ['Jerry']*3 print(name) # ['Jerry', 'Jerry', 'Jerry'] print(id(name[0])) # 54580088 print(id(name[1])) # 54580088 print(id(name[2])) # 54580088 # name2与name1指向同一内存地址 name1 = ['Jerry'] name2 = name1 print(name2) # ['Jerry'] name1.clear() print(name2) # [] # student中变量为name值的复制,与name不指向同一内存地址 name = ['Jerry'] student = name*3 print(student) # ['Jerry', 'Jerry', 'Jerry'] name.clear() print(student) # ['Jerry', 'Jerry', 'Jerry'] # append添加后,student中的['Jerry']与name变量指向同一内存地址 student = ['Tom', 'Jack', 'Avril'] name = ['Jerry'] student.append(name) print(student) # ['Tom', 'Jack', 'Avril', ['Jerry']] name.clear() print(student) # ['Tom', 'Jack', 'Avril', []] # 与name变量不指向同一内存地址 student = ['Tom', 'Jack', 'Avril'] name = 'Jerry' student.append(name) print(student) # ['Tom', 'Jack', 'Avril', 'Jerry'] del name print(student) # ['Tom', 'Jack', 'Avril', 'Jerry'] # 同上,insert插入后,student中的['Jerry']与name变量指向同一内存地址 student = ['Tom', 'Jack', 'Avril'] name = ['Jerry'] student.insert(1, name) print(student) # ['Tom', ['Jerry'], 'Jack', 'Avril'] name.clear() print(student) # ['Tom', [], 'Jack', 'Avril'] # 与name变量不指向同一内存地址 student = ['Tom', 'Jack', 'Avril'] name = 'Jerry' student.insert(1, name) print(student) # ['Tom', 'Jerry', 'Jack', 'Avril'] del name print(student) # ['Tom', 'Jerry', 'Jack', 'Avril'] # extend添加后,student中的['Jerry']为name值的复制 student = ['Tom', 'Jack', 'Avril'] name = ['Jerry'] student.extend(name) print(student) # ['Tom', 'Jack', 'Avril', 'Jerry'] name.clear() print(student) # ['Tom', 'Jack', 'Avril', 'Jerry'] student = ['Tom', 'Jack', 'Avril'] name = 'Jerry' student.extend(name) print(student) # ['Tom', 'Jack', 'Avril', 'J', 'e', 'r', 'r', 'y'] del name print(student) # ['Tom', 'Jack', 'Avril', 'J', 'e', 'r', 'r', 'y']
删除元素
# 删除指定值的元素 student = ['Tom', 'Jack', 'Avril'] student.remove('Tom') print(student) # 弹出栈顶元素 student = ['Tom', 'Jack', 'Avril'] s = student.pop() print(s) print(student) # 删除指定位置元素 student = ['Tom', 'Jack', 'Avril'] del student[1] 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]
>>> 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]
# 矩阵转置 matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12] ] # 方法一 newMatrix = [[row[i] for row in matrix] for i in range(len(matrix[0]))] print(newMatrix) # 方法二 newMatrix = [] for i in range(len(matrix[0])): newMatrix.append([row[i] for row in matrix]) print(newMatrix) # 方法三 newMatrix = [] for i in range(len(matrix[0])): newRow = [] for oldRow in matrix: newRow.append(oldRow[i]) newMatrix.append(newRow) print(newMatrix)