Python之二维数组N*N顺时针旋转90度
需求:把一个二维数组顺时针旋转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版本
- #!/usr/bin/env python3
- # -*- coding:utf-8 -*-
- # Version:Python3.5.0
- # At 2016/2/5 23:01
- '''
- 列如把4*4的二维数组顺时针旋转90度
- ['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']
- '''
- import string
- def get_number():
- '''
- 获取一个N维的数字
- :return: n
- '''
- while True:
- n = 0
- number = input('\033[32;1m请输入N维数组: \033[0m').strip() # 获取一个N的数字
- if number == '':
- continue
- if number.isdigit():
- n = int(number)
- if n > 0 and n <= 26:
- break
- else:
- print('\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
- continue
- else:
- print('\033[31;1m输入的N有误,请重新输入!\033[0m')
- continue
- return n
- def rotating(data, n):
- for r in range(n):
- if r == n -1 : # 最后一个数字不用转换,直接退出循环
- break
- for c in range(r+1,n):
- data[r][c], data[c][r] = data[c][r], data[r][c]
- print('\n第%s次转换后的数据结果' % (r+1))
- for i in range(n):
- print(data[i])
- return data
- if __name__ == '__main__':
- n = get_number() # 返回一个n
- print('顺时针旋转90度 \033[31;1m%s\033[0m 维数组' % n)
- # 获取n个大写字母
- rotate_str = string.ascii_uppercase[:n]
- data = [[row for row in rotate_str] for col in rotate_str]
- print('开始转换之前的数据')
- for i in range(n):
- print(data[i])
- rotating(data, n) # 调用函数
- print('\n最终转换后得到的数据')
- for i in range(n):
- print(data[i])
- python2.7版本
- #!/usr/bin/env python
- # -*- coding:utf-8 -*-
- # Version:Python2.7.10
- # At 2016/2/5 23:01
- '''
- 列如把4*4的二维数组顺时针旋转90度
- ['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']
- '''
- import string
- def get_number():
- '''
- 获取一个N维的数字
- :return: n
- '''
- while True:
- n = 0
- number = raw_input(u'\033[32;1m请输入N维数组: \033[0m').strip() # 获取一个N的数字
- if number == '':
- continue
- if number.isdigit():
- n = int(number)
- if n > 0 and n <= 26:
- break
- else:
- print(u'\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
- continue
- else:
- print(u'\033[31;1m输入的N有误,请重新输入!\033[0m')
- continue
- return n
- def rotating(data, n):
- for r in range(n):
- if r == n -1 : # 最后一个数字不用转换,直接退出循环
- break
- for c in range(r+1,n):
- data[r][c], data[c][r] = data[c][r], data[r][c]
- print(u'\n第%s次转换后的数据结果' % (r+1))
- for i in range(n):
- print(data[i])
- return data
- if __name__ == '__main__':
- n = get_number() # 返回一个n
- print(u'顺时针旋转90度 \033[31;1m%s\033[0m 维数组' % n)
- # 获取n个大写字母
- rotate_str = string.ascii_uppercase[:n]
- data = [[row for row in rotate_str] for col in rotate_str]
- print(u'开始转换之前的数据')
- for i in range(n):
- print(data[i])
- rotating(data, n) # 调用函数
- print(u'\n最终转换后得到的数据')
- for i in range(n):
- print(data[i])
Python之二维数组N*N顺时针旋转90度的更多相关文章
- python的二维数组操作
需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...
- Python创建二维数组(关于list的一个小坑)
0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...
- 整理:python的二维数组操作
Python中初始化一个5 x 3每项为0的数组,最好方法是: multilist = [[0 for col in range(5)] for row in range(3)] 如果初始化一个二维数 ...
- 【算法编程 C++ Python】二维数组查找
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 最简单:每一行都 ...
- python的二维数组操作--坑
用到python list的二维数组,发现有一些需要注意的地方. 第一种赋值方法: list0 = [[0]*3]*4 list0[0][1] = 1 print(list0) 输出结果为: [[0, ...
- 如何使用python将二维数组去重呢?
二维数组的去重,能和一维的方法类似吗?import numpyc=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))print('二维数组:\n ...
- 关于python的二维数组
test =[ [1, 2, 3], [4, 5, 6], [7, 8, 9]] #这个就可以看做是二维数组了,直接创建print(test)print(test[:][1]) ...
- python 一个二维数组和一个整数,判断数组中是否含有该整数
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...
- python 按二维数组的某行或列排序 (numpy lexsort)
lexsort支持对数组按指定行或列的顺序排序:是间接排序,lexsort不修改原数组,返回索引. (对应lexsort 一维数组的是argsort a.argsort()这么使用就可以:argsor ...
随机推荐
- 列出远程git的全部分支
列出全部分支 git ls-remote --heads your.git | awk 'sub(/refs\/heads\//,""){print $2}' 其中awk中sub替 ...
- python多线程抓取代理服务器
文章转载自:https://blog.linuxeye.com/410.html 代理服务器:http://www.proxy.com.ru #coding: utf-8 import urllib2 ...
- mysql 自查询
先介绍用法: 用法解释 select * from a,b : shopping 商品表 , baixitest SELECT b.name from shopping as a, baixi ...
- HTTPPost/AFNetWorking/JSONModel/NSPredicate
一.HTTPPost================================================ 1. POST方式发送请求 HTTP协议下默认数据发送请求方法是GET方式,若需要 ...
- flash代码
Flash常用的动作命令一.Flash中的常用命令:1.在当前帧停止播放 on(release){ stop();} 2.从当前帧开始播放 on(release){ play();} 3.跳到第 10 ...
- Games Delphi developers play
Original link: Games Delphi developers play Delphi game developers are stupid people having too ma ...
- InnoDB MVCC RR隔离级别下的数据可见性总结
一.背景 熟悉数据库隔离级别的人都知道,在RR(可重复读)隔离级别下,无论何时多次执行相同的SELECT快照读语句,得到的结果集都是完全一样的,即便两次SELECT语句执行期间,其他事务已经改变了该查 ...
- python3 chromeDriver 安装与配置
1. 准备工作 在这之前请确保已经正确安装好了Chrome浏览器并可以正常运行,安装过程不再赘述. 2. 查看版本 点击Chrome菜单"帮助"→"关于Google Ch ...
- 【WCF安全】使用X509证书自定义验证
接触WCF时间比较短,在项目中要使用X509证书,纠结好几天终于有了结论,因此为了方便日后查阅和园友交流特意单独将部分代码提出,并做以记录. 1.准备工作 制作X509证书,此处用到三个证书名称 导入 ...
- SqlServer 数据表数据移动
描述:将Test1表中的数据放到Test2表中 1.Test2表不存在 select A,B,C insert into Test2 from Test1 select * into Test2 fr ...