Python之二维数组N*N顺时针旋转90度
2024-09-27 19:05:16
需求:把一个二维数组顺时针旋转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])
最新文章
- jQurey Plugin
- javaweb常见问题解决
- 深入理解PHP内核(三)概览-SAPI概述
- 前端开发--css属性书写顺序
- 结合NGUI做的手机拍照(可自定义相框)
- Jquery 固定悬浮层以及固定表头
- SQL Server数据库PIVOT函数的使用详解(一)
- 解决rsyslog 断电或者被kill 重发问题
- 开启Apache mod_rewrite模块(解决404 Not Found)
- JDBC学习入门
- leetcode Valid Parentheses python
- iOS MJRefresh上拉加载更多
- 剑指offer面试题6 重建二叉树(java)
- gitbook 入门教程之发布电子书
- C++中构造函数和析构函数的调用顺序
- bzoj5044: 岛屿生成
- [UE4]移动相机,使用Arrow组件来标记移动位置
- day12-集合
- 含参变量积分-Leibniz法则
- C++中冒号的作用
热门文章
- 阿里云上如何利用yum安装jenkins
- 【python】利用h5py存储数据
- [Git]Git指南一 查看创建删除标签
- Webpack 热部署检测不到文件变化问题
- Win7系统64位环境下使用Apache——安装Apache2.4时报错“Invalid command Order”问题的解决
- 学习nodejs部分基础内容入门小结
- Git commit 信息标准和丢弃必须要的commit
- HDU - 6197:array array array (简单LIS)
- HDU - 5088: Revenge of Nim II (问是否存在子集的异或为0)
- Java 开发手册之编程规约