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分句

 

 

 

还可以用来筛选 列表内容

 

 

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

 

 

 

 

 

 

 

 

 

 

 

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

 

posted @ 2022-07-12 18:40  DICEi  阅读(97)  评论(0)    收藏  举报