列表(VII)

列表(VII)

小甲鱼python课后作业第25讲
列表推导式:[expression for target in iterable if condition1]

0. 有时候我们会看到大牛的代码中使用单独一个下划线(_)来作为变量的名字,它通常有何含义?

  通常表示这个变量是临时的,或者无关紧要的。如果是下划线组合,比如 _var__var__var__var_,它们都有约定俗成地特殊含义,不要轻易使用这些组合名称(具体是啥特殊含义,咱在后面的课程会有详细讲解哈)。

1. 请使用列表推导式创建一个 4 * 5 的二维列表,并将每个元素初始化为数字 8。

   4 * 5 就是 4 行 5 列,那么就是内层嵌套列表包含 5 个元素,外层列表包含 4 个嵌套列表的意思啦。

s = [[8] * 5 for i in range(4)] 
s
[[8,8,8,8,8],[8,8,8,8,8],[8,8,8,8,8],[8,8,8,8,8,8]]

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 = []
result = [[x, y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 2 != 0]
print(result)

4. 请将下面 matrix 矩阵反向展开,即使得最终的结果为 [9, 8, 7, 6, 5, 4, 3, 2, 1]

>>> matrix = [[1, 2, 3],
...           [4, 5, 6],
...           [7, 8, 9]]
flatten = [col for row in matrix for col in row][::-1]
flatten

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] 
#或者
result = [[color,size] for color in colors for size in sizes]

6. 请使用列表推导式,获得 matrix 矩阵的转置矩阵 Tmatrix(将 matrix 的行列互换之后得到的矩阵,称为 matrix 的转置矩阵)。


>>> matrix = [[1, 2, 3, 4],
...           [5, 6, 7, 8],
...           [9, 10, 11, 12]]

什么是转置矩阵?
一个矩阵 matrix,把它的第一行变成第一列,第二行变成第二列,……,最末一行变为最末一列,从而得到一个新的矩阵 Tmatrix。这一过程称为矩阵的转置。

>>> Tmatrix = [[row[i] for row in matrix] for i in range(4)]
>>> Tmatrix
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

相当于

 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)

7. 请按照顺时针螺旋顺序输出矩阵中的所有元素。
在这里插入图片描述
提示1:根据已知矩阵,我们可以轻而易举地获取它四个方向的初始值(top: 0; right: 二维列表的“行”的长度; bottom: 二维列表的“列”的长度; left: 0)
在这里插入图片描述

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12]]
rows = 0
cols = 0
for row in matrix:
    rows += 1
for col in matrix[0]:
    cols += 1

top = 0
right = cols - 1
bottom = rows - 1
left = 0

result = []

while left <= right and top <= right:
    #从左往右遍历
    for i in range(left,right+1):
        result.append(matrix[top][i])
    #从上往下遍历    
    for j in range(top+1,bottom+1):
        result.append(matrix[j][right])
        
    if left < right and top < bottom:
    	#从右往左遍历
        for i in range(right-1,left,-1):
            result.append(matrix[bottom][i])
        #从下往上遍历
        for j in range(bottom,top,-1):
            result.append(matrix[j][left])
    left = left + 1
    right = right - 1
    top = top + 1
    bottom = bottom - 1

print(result)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值