您的位置:首页 > 编程语言 > Python开发

python3 入门 (二) 列表的使用

2015-09-23 13:31 711 查看
列表用于组织其它数值,即写在方括号之间、用逗号分隔开的数值列表。列表内的项目不必全是相同的类型。

列表的定义
student = ['Tom', 'Jack', 'Avril']


添加元素

将另一个列表直接赋值给该列表
使用"[头下标:尾下标]"j将另一个列表的指定元素值拷贝至该列表
使用"+"连接符,将元素添加至列表末尾
使用" * "乘号得到多个相同元素
使用append方法,将元素添加至列表末尾
使用extend方法,将元素添加至列表末尾
使用insert方法,将元素插入至指定位置

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']


删除元素

使用remove方法删除指定值的元素
使用pop方法弹出栈顶元素,返回弹出元素
使用del关键字删除指定位置元素
使用clear方法清空列表元素,等于del
a[:]

# 删除指定值的元素
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]


可以用 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]


用列表推导式实现矩阵转置:
# 矩阵转置
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)


博客园博客:欠扁的小篮子
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: