Python之二维数组N*N顺时针旋转90度
2016-02-06 12:29
591 查看
需求:把一个二维数组顺时针旋转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']
#!/usr/bin/envpython3
#-*-coding:utf-8-*-
#Version:Python3.5.0
#At2016/2/523: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']
'''
importstring
defget_number():
'''
获取一个N维的数字
:return:n
'''
whileTrue:
n=0
number=input('\033[32;1m请输入N维数组:\033[0m').strip()#获取一个N的数字
ifnumber=='':
continue
ifnumber.isdigit():
n=int(number)
ifn>0andn<=26:
break
else:
print('\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
continue
else:
print('\033[31;1m输入的N有误,请重新输入!\033[0m')
continue
returnn
defrotating(data,n):
forrinrange(n):
ifr==n-1:#最后一个数字不用转换,直接退出循环
break
forcinrange(r+1,n):
data[r][c],data[c][r]=data[c][r],data[r][c]
print('\n第%s次转换后的数据结果'%(r+1))
foriinrange(n):
print(data[i])
returndata
if__name__=='__main__':
n=get_number()#返回一个n
print('顺时针旋转90度\033[31;1m%s\033[0m维数组'%n)
#获取n个大写字母
rotate_str=string.ascii_uppercase[:n]
data=[[rowforrowinrotate_str]forcolinrotate_str]
print('开始转换之前的数据')
foriinrange(n):
print(data[i])
rotating(data,n)#调用函数
print('\n最终转换后得到的数据')
foriinrange(n):
print(data[i])
python2.7版本
#!/usr/bin/envpython
#-*-coding:utf-8-*-
#Version:Python2.7.10
#At2016/2/523: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']
'''
importstring
defget_number():
'''
获取一个N维的数字
:return:n
'''
whileTrue:
n=0
number=raw_input(u'\033[32;1m请输入N维数组:\033[0m').strip()#获取一个N的数字
ifnumber=='':
continue
ifnumber.isdigit():
n=int(number)
ifn>0andn<=26:
break
else:
print(u'\033[31;1m输入的N数字超出范围,请重新输入!\033[0m')
continue
else:
print(u'\033[31;1m输入的N有误,请重新输入!\033[0m')
continue
returnn
defrotating(data,n):
forrinrange(n):
ifr==n-1:#最后一个数字不用转换,直接退出循环
break
forcinrange(r+1,n):
data[r][c],data[c][r]=data[c][r],data[r][c]
print(u'\n第%s次转换后的数据结果'%(r+1))
foriinrange(n):
print(data[i])
returndata
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=[[rowforrowinrotate_str]forcolinrotate_str]
print(u'开始转换之前的数据')
foriinrange(n):
print(data[i])
rotating(data,n)#调用函数
print(u'\n最终转换后得到的数据')
foriinrange(n):
print(data[i])
比如把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版本python2.7版本
相关文章推荐
- Python3.x和Python2.x的区别,以及python2代码转python3
- Beginning Python Chapter9
- Python爬取一个网页的图片
- 【Python 笔记】神奇的匿名函数
- 机器学习基石笔记-感知机
- python的正则表达式 re
- Python上传package到Pypi(代码简单)
- Python模拟登录验证码(代码简单)
- [python]——关于中文字串与URL编码之间的转化
- python成长之路第一篇(5)文件的基本操作
- python成长之路第一篇(5)文件的基本操作
- Python获取免费的可用代理
- python 编码格式
- [Leetcode]211. Add and Search Word - Data structure design @python
- 《笨办法学Python》 第34课手记
- python之模块导入和重载
- [Leetcode]201. Bitwise AND of Numbers Range @python
- 最简单的python命令解析器
- [Leetcode]188. Best Time to Buy and Sell Stock IV@python
- NumPy基础(一)