鱼C论坛

 找回密码
 立即注册
查看: 2427|回复: 1

[技术交流] Python之使用一个列表推导式实现矩阵顺时针螺旋打印

[复制链接]
发表于 2023-9-23 17:22:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
起因是本人学Python学到列表的最后一个章节,在论坛作业当中看到了这样一道题:

原题

原题


由于小甲鱼这课的主题仍旧是关于列表推导式的,于是本人就绞尽脑汁地想要使用一个列表推导式完成这一功能,代码如下:

  1. # 用户输入所需要生成矩阵的行数和列数,行和列需要同时大于0 #
  2. row = int(input("请输入需要生成的矩阵的行数:"))
  3. col = int(input("请输入需要生成的矩阵的列数:"))

  4. #自动生成一矩阵,这里矩阵里元素的内容不重要
  5. matrix = [[(i + 1 + j * col) for i in range(col)] for j in range(row)]
  6. print(matrix)

  7. #先将矩阵按行打印出来,方便观察
  8. for i in range(row):
  9.     print(matrix[i])

  10. #生成矩阵matrix的顺时针打印矩阵
  11. clockwise_matrix = [
  12.                     matrix[
  13.                                (i // 4) * (1 // (i % 4 + 1))
  14.                                + j * ((i + 1) // (2 * col - col % 2)) * (1 // (col // row + 1)) * (1 // (i % 4 + 1))
  15.                                + (j + i // 4) * (1 // ((i - 1) % 4 + 1))
  16.                                + (row - (i + 2) // 4) * (1 // ((i - 2) % 4 + 1))
  17.                                + (row - (j + (i + 1) // 4)) * (1 // ((i - 3) % 4 + 1))
  18.                              ]
  19.                              [
  20.                                (j + i // 4) * (1 // (i % 4 + 1))
  21.                                - j * ((i + 1) // (2 * col - col % 2)) * (1 // (col // row + 1)) * (1 // (i % 4 + 1))
  22.                                + (col - (i + 3) // 4) * (1 // ((i - 1) % 4 + 1))
  23.                                + (col - (j + (i + 2) // 4)) * (1 // ((i - 2) % 4 + 1))
  24.                                + (i // 4) * (1 // ((i - 3) % 4 + 1))
  25.                              ]
  26.                     for i in range
  27.                              (
  28.                                 (2 * row - row % 2) * (1 // ((row - 1) // col + 1))
  29.                                 + (2 * col - col % 2) * (1 // (col // row + 1))
  30.                              )
  31.                     for j in range
  32.                              (
  33.                                (
  34.                                 col - (2 * (i // 4) + 1)
  35.                                 + (i + 1) // (2 * row - row % 2) * (1 // ((row -1) // col + 1))
  36.                                 + (i + 1) // (2 * col - col % 2) * ((2 * (i // 4) + 1) - col + row - i // 2) * (1 // (col // row + 1))
  37.                                )
  38.                                 * (1 // (i % 2 + 1))
  39.                                +
  40.                                (
  41.                                 row - (2 * (i // 4) + 1)
  42.                                )
  43.                                 * (1 - 1 // (i % 2 + 1))
  44.                              )
  45.                             ]

  46. #打印matrix矩阵的顺时针打印矩阵
  47. print(clockwise_matrix)
复制代码


可以看到,通过如上的一坨代码,即可以实现给定任意二维矩阵的顺时针螺旋打印,当然这写的非常不美观,不过能够实现功能,不信鱼油们可以试试(逝逝)

评分

参与人数 1荣誉 +2 鱼币 +1 收起 理由
不二如是 + 2 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-9-24 11:13:11 | 显示全部楼层
感谢分享
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-26 12:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表