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 ...
随机推荐
- IIS(IISReset.exe)命令行
(转自:http://www.cnblogs.com/itech/archive/2009/05/18/1459231.html) 一 IIS命令行 Iisreset.exe 的概述 Iisreset ...
- L138 Cryptocurrency Exchanges at Risk of Manipulation
Several cryptocurrency exchanges are plagued by poor market surveillance, pervasive conflicts of int ...
- Agilent RF fundamentals (1)- fundamental units of measure
- DRF 的 版本,解析器,与序列化
DRF 的 版本,解析器,与序列化 补充 配置文件中的 类的调用: (字符串) v1 = ["view.xx.apth.Role","view.xx.apth.Role& ...
- [置顶]
【机器学习PAI实践五】机器学习眼中的《人民的名义》
一.背景 最近热播的反腐神剧"人民的名义"掀起来一波社会舆论的高潮,这部电视剧之所能得到广泛的关注,除了老戏骨们精湛的演技,整部剧出色的剧本也起到了关键的作用.笔者在平日追剧之余, ...
- RIP 知识要点
RIP知识要点: UDP:520 版本:v1(广播包更新) / v2(组播更新 224.0.0.9 ) 度量值:跳数(最多跳15跳,路由为16跳时路由不可达) =================== ...
- php果然是世界上最好的语言
这两天参加Hackathon,作为一个什么都半吊子的家伙,两人小队伍被逼上岗,于是我不得不着手写代码.由此,我体验到了php的魔力-- 首先,我深刻地意识到了更新版本的重要性. 偷懒不想搭Apache ...
- LeetCode Design TinyURL
原题链接在这里:https://leetcode.com/problems/design-tinyurl/description/ 题目: How would you design a URL sho ...
- Multisim的电路分析方法
Multisim的电路分析方法:主要有直流工作点分析,交流分析,瞬态分析,傅里叶分析,噪声分析,失真分析,直流扫描分析, 灵敏度分析,参数扫描分析,温度扫描分析,零一极点分析,传递函数分析,最坏情况分 ...
- vba传递参数类型错误
先来看看微软官方的说明: 目录内容 概要 解决方案 详细信息 重现问题的步骤 &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; ...