您的位置:首页 > 编程语言 > Python开发

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']

1、思路

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



2、源码实现

python3.5版本

#!/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])


  


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: