需求:把一个二维数组顺时针旋转90度,现实数据的替换。

  比如把4*4的二维数组顺时针旋转90度

  原始数据是一个嵌套列表:[['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D'], ['A', 'B', 'C', 'D']]

  更直观打印显示如下:

['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
['A', 'B', 'C', 'D']
转换成下面的数组
['A', 'A', 'A', 'A']
['B', 'B', 'B', 'B']
['C', 'C', 'C', 'C']
['D', 'D', 'D', 'D']


1、思路

  在N*N维数组中,对角线的数据转换前后不变。需要转换次数为 N-1 次。

2、源码实现

  • python3.5版本
  1. #!/usr/bin/env python3
  2. # -*- coding:utf-8 -*-
  3. # Version:Python3.5.0
  4. # At 2016/2/5 23:01
  5. '''
  6. 列如把4*4的二维数组顺时针旋转90度
  7. ['A', 'B', 'C', 'D']
  8. ['A', 'B', 'C', 'D']
  9. ['A', 'B', 'C', 'D']
  10. ['A', 'B', 'C', 'D']
  11. 转换成下面的数组
  12. ['A', 'A', 'A', 'A']
  13. ['B', 'B', 'B', 'B']
  14. ['C', 'C', 'C', 'C']
  15. ['D', 'D', 'D', 'D']
  16. '''
  17. import string
  18.  
  19. def get_number():
  20. '''
  21. 获取一个N维的数字
  22. :return: n
  23. '''
  24. while True:
  25. n = 0
  26. number = input('\033[32;1m请输入N维数组: \033[0m').strip() # 获取一个N的数字
  27. if number == '':
  28. continue
  29. if number.isdigit():
  30. n = int(number)
  31. if n > 0 and n <= 26:
  32. break
  33. else:
  34. print('\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
  35. continue
  36. else:
  37. print('\033[31;1m输入的N有误,请重新输入!\033[0m')
  38. continue
  39. return n
  40.  
  41. def rotating(data, n):
  42. for r in range(n):
  43. if r == n -1 : # 最后一个数字不用转换,直接退出循环
  44. break
  45. for c in range(r+1,n):
  46. data[r][c], data[c][r] = data[c][r], data[r][c]
  47. print('\n第%s次转换后的数据结果' % (r+1))
  48. for i in range(n):
  49. print(data[i])
  50. return data
  51.  
  52. if __name__ == '__main__':
  53. n = get_number() # 返回一个n
  54. print('顺时针旋转90度 \033[31;1m%s\033[0m 维数组' % n)
  55. # 获取n个大写字母
  56. rotate_str = string.ascii_uppercase[:n]
  57. data = [[row for row in rotate_str] for col in rotate_str]
  58. print('开始转换之前的数据')
  59. for i in range(n):
  60. print(data[i])
  61.  
  62. rotating(data, n) # 调用函数
  63.  
  64. print('\n最终转换后得到的数据')
  65. for i in range(n):
  66. print(data[i])

 

  • python2.7版本

  

  1.  
  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. # Version:Python2.7.10
  4. # At 2016/2/5 23:01
  5. '''
  6. 列如把4*4的二维数组顺时针旋转90度
  7. ['A', 'B', 'C', 'D']
  8. ['A', 'B', 'C', 'D']
  9. ['A', 'B', 'C', 'D']
  10. ['A', 'B', 'C', 'D']
  11. 转换成下面的数组
  12. ['A', 'A', 'A', 'A']
  13. ['B', 'B', 'B', 'B']
  14. ['C', 'C', 'C', 'C']
  15. ['D', 'D', 'D', 'D']
  16. '''
  17. import string
  18.  
  19. def get_number():
  20. '''
  21. 获取一个N维的数字
  22. :return: n
  23. '''
  24. while True:
  25. n = 0
  26. number = raw_input(u'\033[32;1m请输入N维数组: \033[0m').strip() # 获取一个N的数字
  27. if number == '':
  28. continue
  29. if number.isdigit():
  30. n = int(number)
  31. if n > 0 and n <= 26:
  32. break
  33. else:
  34. print(u'\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
  35. continue
  36. else:
  37. print(u'\033[31;1m输入的N有误,请重新输入!\033[0m')
  38. continue
  39. return n
  40.  
  41. def rotating(data, n):
  42. for r in range(n):
  43. if r == n -1 : # 最后一个数字不用转换,直接退出循环
  44. break
  45. for c in range(r+1,n):
  46. data[r][c], data[c][r] = data[c][r], data[r][c]
  47. print(u'\n第%s次转换后的数据结果' % (r+1))
  48. for i in range(n):
  49. print(data[i])
  50. return data
  51.  
  52. if __name__ == '__main__':
  53. n = get_number() # 返回一个n
  54. print(u'顺时针旋转90度 \033[31;1m%s\033[0m 维数组' % n)
  55. # 获取n个大写字母
  56. rotate_str = string.ascii_uppercase[:n]
  57. data = [[row for row in rotate_str] for col in rotate_str]
  58. print(u'开始转换之前的数据')
  59. for i in range(n):
  60. print(data[i])
  61.  
  62. rotating(data, n) # 调用函数
  63.  
  64. print(u'\n最终转换后得到的数据')
  65. for i in range(n):
  66. print(data[i])
  1.  

  

  1.  

Python之二维数组N*N顺时针旋转90度的更多相关文章

  1. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  2. Python创建二维数组(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...

  3. 整理:python的二维数组操作

    Python中初始化一个5 x 3每项为0的数组,最好方法是: multilist = [[0 for col in range(5)] for row in range(3)] 如果初始化一个二维数 ...

  4. 【算法编程 C++ Python】二维数组查找

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 最简单:每一行都 ...

  5. python的二维数组操作--坑

    用到python list的二维数组,发现有一些需要注意的地方. 第一种赋值方法: list0 = [[0]*3]*4 list0[0][1] = 1 print(list0) 输出结果为: [[0, ...

  6. 如何使用python将二维数组去重呢?

    二维数组的去重,能和一维的方法类似吗?import numpyc=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))print('二维数组:\n ...

  7. 关于python的二维数组

    test =[ [1, 2, 3], [4, 5, 6], [7, 8, 9]]   #这个就可以看做是二维数组了,直接创建print(test)print(test[:][1])           ...

  8. python 一个二维数组和一个整数,判断数组中是否含有该整数

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...

  9. python 按二维数组的某行或列排序 (numpy lexsort)

    lexsort支持对数组按指定行或列的顺序排序:是间接排序,lexsort不修改原数组,返回索引. (对应lexsort 一维数组的是argsort a.argsort()这么使用就可以:argsor ...

随机推荐

  1. 列出远程git的全部分支

    列出全部分支 git ls-remote --heads your.git | awk 'sub(/refs\/heads\//,""){print $2}' 其中awk中sub替 ...

  2. python多线程抓取代理服务器

    文章转载自:https://blog.linuxeye.com/410.html 代理服务器:http://www.proxy.com.ru #coding: utf-8 import urllib2 ...

  3. mysql 自查询

    先介绍用法: 用法解释  select  * from  a,b  : shopping 商品表 , baixitest SELECT b.name from shopping as a, baixi ...

  4. HTTPPost/AFNetWorking/JSONModel/NSPredicate

    一.HTTPPost================================================ 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式,若需要 ...

  5. flash代码

    Flash常用的动作命令一.Flash中的常用命令:1.在当前帧停止播放 on(release){ stop();} 2.从当前帧开始播放 on(release){ play();} 3.跳到第 10 ...

  6. Games Delphi developers play

    Original link: Games Delphi developers play   Delphi game developers are stupid people having too ma ...

  7. InnoDB MVCC RR隔离级别下的数据可见性总结

    一.背景 熟悉数据库隔离级别的人都知道,在RR(可重复读)隔离级别下,无论何时多次执行相同的SELECT快照读语句,得到的结果集都是完全一样的,即便两次SELECT语句执行期间,其他事务已经改变了该查 ...

  8. python3 chromeDriver 安装与配置

    1. 准备工作 在这之前请确保已经正确安装好了Chrome浏览器并可以正常运行,安装过程不再赘述. 2. 查看版本 点击Chrome菜单"帮助"→"关于Google Ch ...

  9. 【WCF安全】使用X509证书自定义验证

    接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入 ...

  10. SqlServer 数据表数据移动

    描述:将Test1表中的数据放到Test2表中 1.Test2表不存在 select A,B,C insert into Test2 from Test1 select * into Test2 fr ...