python 作业24 列表 7
问题:
0. 有时候我们会看到大牛的代码中使用单独一个下划线(_)来作为变量的名字,它通常有何含义?
通常表示这个变量是临时的,或者无关紧要的。如果是下划线组合,比如 _var、__var、__var__、var_,它们都有约定俗成地特殊含义,不要轻易使用这些组合名称
1.请使用列表推导式创建一个 4 * 5 的二维列表,并将每个元素初始化为数字 8。
a = [[8] * 5 for i in range(4)]
2.请将下面列表推导式还原成循环语句的实现形式。
result = [i / 2 for i in range(10) if i % 2 == 0]
result = [] for i in range(10): if i % 2 == 0: result.append(i/2)
3.请将下面的嵌套循环语句使用列表推导式实现。
>>> result = [] >>> for x in range(10): ... if x % 2 == 0: ... for y in range(10): ... if y % 2 != 0: ... result.append([x, y])
result = [[x,y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 2 !=0]
4.请将下面 matrix 矩阵反向展开,即使得最终的结果为 [9, 8, 7, 6, 5, 4, 3, 2, 1]。
>>> matrix = [[1, 2, 3], ... [4, 5, 6], ... [7, 8, 9]]
a = [col for row in matrix for col in row][::-1]
5.鱼C-T恤总共提供了有 2 种颜色("BLACK", "WHITE")和 10 个码数("WS", "WM", "WL", "S", "M", "L", "XL", "2XL", "3XL", "4XL")的选择,请使用列表推导式统计所有颜色和尺码的组合(要求将每个组合使用一个内嵌的列表包含起来,如下所示)。
>>> colors = ["BLACK", "WHITE"] >>> sizes = ["WS", "WM", "WL", "S", "M", "L", "XL", "2XL", "3XL", "4XL"] >>> >>> # 请使用列表推导式,统计得出下面的结果 >>> >>> result [['BLACK', 'WS'], ['BLACK', 'WM'], ['BLACK', 'WL'], ['BLACK', 'S'], ['BLACK', 'M'], ['BLACK', 'L'], ['BLACK', 'XL'], ['BLACK', '2XL'], ['BLACK', '3XL'], ['BLACK', '4XL'], ['WHITE', 'WS'], ['WHITE', 'WM'], ['WHITE', 'WL'], ['WHITE', 'S'], ['WHITE', 'M'], ['WHITE', 'L'], ['WHITE', 'XL'], ['WHITE', '2XL'], ['WHITE', '3XL'], ['WHITE', '4XL']]
result = [[x,y] for x in colors for y in sizes]
动动手:
0.请使用列表推导式,获得 matrix 矩阵的转置矩阵 Tmatrix(将 matrix 的行列互换之后得到的矩阵,称为 matrix 的转置矩阵)
>>> matrix = [[1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12]]
什么是转置矩阵?
一个矩阵 matrix,把它的第一行变成第一列,第二行变成第二列,……,最末一行变为最末一列,从而得到一个新的矩阵 Tmatrix。这一过程称为矩阵的转置

matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] tmatrix = [[row[i] for row in matrix] for i in range(4) ]
transposed = []
for i in range(4): transposed.append([row[i] for row in matrix])
transposed = [] for i in range(4): transposed_row = [] for row in matrix: transposed_row.append(row[i]) transposed.append(transposed_row)
1.请按照顺时针螺旋顺序输出矩阵中的所有元素。
比如矩阵 matrix 如下:
>>> matrix = [[1, 2, 3, 4], ... [5, 6, 7, 8], ... [9, 10, 11, 12]]
那么将输出
[1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7]

提示1:根据已知矩阵,我们可以轻而易举地获取它四个方向的初始值(top: 0; right: 二维列表的“行”的长度; bottom: 二维列表的“列”的长度; left: 0)f

提示2:那么按照顺时针螺旋顺序……
- 先从左往右遍历,依次是 (top, left) 到 (top, right)
- 然后从上往下遍历,依次是 (top+1, right) 到 (bottom, right)
- 接着从右往左遍历,依次是 (bottom, right-1) 到 (bottom, left+1)
- 最后从下往上遍历,依次是 (bottom, left) 到 (top+1, left)
提示3:经过一轮的遍历,那么相当于走了外层一圈,接着应该怎么办?没错,应该进入下一层,也就是 left+1、right-1、top+1、bottom-1。
提示4:那么每前进一层 left 就加 1,right 就减 1,top 和 bottom 也是一样,那么无论这个二维列表有多大,都会遇到一个矛盾点,那就是 left 终究会大于 right,bop 终究会大于 bottom,对不对?所以嘛,这个就是结束的条件啦!]
matrix = [[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]]
# 获取二维列表的行数并存放到变量 rows 中
# 获取二维列表的列数并存放到变量 cols 中
rows = len(matrix)
cols = len(matrix[0])
left = 0
right = cols - 1
top = 0
bottom = rows - 1
result = []
while left <= right and top <= bottom:
# 从左往右遍历
for col in range(left, right + 1):
result.append(matrix[top][col])
# 从上往下遍历
for row in range(top + 1, bottom + 1):
result.append(matrix[row][right])
if left < right and top < bottom:
# 从右往左遍历
for col in range(right - 1, left, -1):
result.append(matrix[bottom][col])
# 从下往上遍历
for row in range(bottom, top, -1):
result.append(matrix[row][left])
left = left + 1
right = right - 1
top = top + 1
bottom = bottom - 1
print(result)
小结:
列表推导式 还可以添加if分句


还可以用来筛选 列表内容

以下句式可以用来拆解列表




注意 使用这个方法的时候 一定要保证代码的简洁 不要无脑套

浙公网安备 33010602011771号