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 ...
随机推荐
- Codeforces Round #181 (Div. 2)C
用lucas定理, p必须是素数 对于单独的C(n, m) mod p,已知C(n, m) mod p = n!/(m!(n - m)!) mod p.显然除法取模,这里要用到m!(n-m)!的逆元. ...
- 影响wifi信号强度因素
影响WIFI信号强度因素: 1.室内错综复杂的环境,会在一定程度上导致WIFI无线信号产生多径传播现象,从而导致信号强度的不稳定性: 2.室内的人员密集程度和人员流动情况也会对WIFI信号强度产生影响 ...
- wc.exe(c语言实现)
Github项目地址:https://github.com/zhongciting2009/wc WC 项目要求 wc.exe 是一个常见的工具,它能统计文本文件的字符数.单词数和行数.这个项目要求写 ...
- 如何在PostgreSQL中建只读账号
转: 如何在PostgreSQL中建只读账号 Posted on 2014-01-21 22:00:15 by osdba 在PostgreSQL中并没有CREATE TABLE权限名称,这是与其它数 ...
- auto_ptr, unique_ptr, shared_ptr and weak_ptr智能指针讲解
笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解 ...
- 前端之jQuery03 插件
jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法(通常用来制作插件) 增加两个插件方法: // jQuery 扩展机制 // 自己扩展两个方法 // 把我这个 ...
- CodeForces - 662A:Gambling Nim (求有多少个子集其异或为S)(占位)
As you know, the game of "Nim" is played with n piles of stones, where the i-th pile initi ...
- linux下安装boost
linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装:#yum install gcc ...
- window.top.location
window.top.location的作用 top, 表示是顶层页面, 因为页面之中可能嵌入了 frame 等子页面,top表示最外面一层 Html代码 <html> <hea ...
- C# 自定义exe引用的dll路径
MSDN原文:https://msdn.microsoft.com/library/twy1dw1e(v=vs.100).aspx <runtime> 的 <assemblyBind ...