TA的每日心情 | 开心 2024-5-27 23:24 |
---|
签到天数: 300 天 [LV.8]以坛为家I
|
[Python] 纯文本查看 复制代码 # 列表推导式可以使用复杂的表达式和嵌套函数
from math import pi
print([str(round(pi,i)) for i in range(1,6)])
[Python] 纯文本查看 复制代码 # 普通的列表推导式
list1 = [x for x in range(10)]
print(list1)
[Python] 纯文本查看 复制代码 # 嵌套的列表推导式
# 列表推导式中的初始推导式可以是任何表达式 甚至可以是另外的列表推导式
list2 = [[x for x in range(10)] for y in range(3)]
print(list2)
[Python] 纯文本查看 复制代码 # 现在 先定义一个3x4的矩阵 由三个长度为四的列表组成
n = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
# 用列表推导式将n里面所有的元素给遍历 items1和items2这两者保存的值是一样的是相等的
items1 = [row[i] for row in n for i in range(4)]
items2 = [i for row in n for i in row]
print(items1)
print(items2)
print(n)
[Python] 纯文本查看 复制代码 # 转置列表的行列 之前是 [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] 这种样子 现在变成这种 [[1,5,9],[2,6,10],[3,7,11],[4,8,12]] 样子
# 在 [row[i] for row in n for i in range(4)] 中 首先 for循环遍历行 然后遍历列所对应的索引 列表推导式生成的数字的顺序和原始列表的数字的顺序是一样的
# 我们遍历列表中的所有行的其中某一列 先用for循环遍历可迭代对象range 每次遍历可迭代对象range 变量i都会更新值 可迭代对象range的范围是列表中的行的长度
# 然后再遍历行 每次遍历行 都会产生行中的某一列 也可以这样说 先遍历行中某一列所对应的索引 然后再遍历每一行 生成的值是每一行中的某一列 在列表推导式中 前面的
# 表达式基于后面的for循环求值 我们改写 [row[i] for row in n for i in range(4)] 使其变成 [[row[i] for row in n] for i in range(4)] 这样 就可以转置行列了
# 感觉有点难以表述 在n中 有3个列表 每个列表的长度为4 每个列表有4个元素 3个列表的元素数目是相等的 用for循环遍历range可迭代对象 使其产生的数字序列中的数字个数和
# 每个列表中的元素数目相同 而且可迭代对象range每次产生的数字对应列表中的某一列 for i in range(4)的前面是列表推导式 每次产生的列表 其值涵盖每一行中某一列 这个某一列是由i决定的
n = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
items1_1 = [[row[i] for row in n] for i in range(4)]
print(items1_1)
# 也可以这样写
list1 = []
for i in range(4):
list1.append([j[i] for j in n])
print(list1)
# 还可以这样写
list1 = []
for i in range(4):
list2 = []
for v in n:
list2.append(v[i])
list1.append(list2)
print(list1)
[Python] 纯文本查看 复制代码 n = [
[1,2,3,4],
[5,6,7,8],
[9,10,11,12]
]
# Python官方文档应该是这样说的 在实际的应用中 最好用内置函数代替复杂的流程语句 所以在这里 我使用了zip()函数 来完成列表的转置
# zip()函数 将多个序列组成的可迭代对象作为参数 将序列中的元素按照对应的位置重新组合 打包成一个个的元组 然后返回由这些元组组成的列表 具体的返回值是一个对象地址
# *操作符用于将列表拆解 list()函数用于展开列表
print(list((zip(*n))))
[([1, 2, 3, 4],), ([5, 6, 7, 8],), ([9, 10, 11],)]
[(1, 5, 9), (2, 6, 10), (3, 7, 11)]
|
评分
-
查看全部评分
|