需求:把一个二维数组顺时针旋转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度的更多相关文章

  1. python的二维数组操作

    需要在程序中使用二维数组,网上找到一种这样的用法: ? 1 2 3 4 5 6 #创建一个宽度为3,高度为4的数组 #[[0,0,0], # [0,0,0], # [0,0,0], # [0,0,0] ...

  2. Python创建二维数组(关于list的一个小坑)

    0.目录 1.遇到的问题 2.创建二维数组的办法 3.1 直接创建法 3.2 列表生成式法 3.3 使用模块numpy创建 1.遇到的问题 今天写Python代码的时候遇到了一个大坑,差点就耽误我交作 ...

  3. 整理:python的二维数组操作

    Python中初始化一个5 x 3每项为0的数组,最好方法是: multilist = [[0 for col in range(5)] for row in range(3)] 如果初始化一个二维数 ...

  4. 【算法编程 C++ Python】二维数组查找

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 思路: 最简单:每一行都 ...

  5. python的二维数组操作--坑

    用到python list的二维数组,发现有一些需要注意的地方. 第一种赋值方法: list0 = [[0]*3]*4 list0[0][1] = 1 print(list0) 输出结果为: [[0, ...

  6. 如何使用python将二维数组去重呢?

    二维数组的去重,能和一维的方法类似吗?import numpyc=np.array(((1,2),(3,4),(5,6),(7,8),(7,8),(3,4),(1,2)))print('二维数组:\n ...

  7. 关于python的二维数组

    test =[ [1, 2, 3], [4, 5, 6], [7, 8, 9]]   #这个就可以看做是二维数组了,直接创建print(test)print(test[:][1])           ...

  8. python 一个二维数组和一个整数,判断数组中是否含有该整数

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序. 请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. de ...

  9. python 按二维数组的某行或列排序 (numpy lexsort)

    lexsort支持对数组按指定行或列的顺序排序:是间接排序,lexsort不修改原数组,返回索引. (对应lexsort 一维数组的是argsort a.argsort()这么使用就可以:argsor ...

随机推荐

  1. HDU6071-最短路

    http://acm.hdu.edu.cn/showproblem.php?pid=6071 四个点围成一个环,相邻两点之间存在路径,问从2号点出发最后再次回到二号点,在路程大于等于K的情况下的最小路 ...

  2. hdu 5265

    http://acm.hdu.edu.cn/showproblem.php?pid=5256 题目不错,题面忍不住骂一句mmp.......后面说ai都是正整数,我以为修改后也必须是正整数,前面又说只 ...

  3. nginx 相关资料

    1.https://juejin.im/post/5a2600bdf265da432b4aaaba (nginx从入门到实践) 2.https://blog.csdn.net/hzsunshine/a ...

  4. [转载]java开发实现word在线编辑及流转

    OA公文流转系统主要用于处理企业日常工作中内外部的各种公文,包括了公文的拟稿.审批.传阅.公告.归档,多层上级可以对下级撰写的公文进行逐级审批或修改,待最高级人员确认无误后即可进行核稿和发文等操作,最 ...

  5. python基础之多线程与多进程(二)

    上课笔记整理: 守护线程的作用,起到监听的作用 一个函数连接数据库 一个做守护线程,监听日志 两个线程同时取一个数据 线程---->线程安全---->线程同时进行操作数据. IO操作--- ...

  6. Android中轻松使用线程

     当你第一次启动一个Android程序的时候,一个被 称为"main"的线程就被自动创建了.它被称为主线程或者UI线程,它是非常重要的因为负责分发事件给对应的widget,还包含画 ...

  7. New Concept English three (31)

    35w/m 45 True eccentrics never deliberately set out to draw attention to themselves. They disregard ...

  8. C#实现文件与二进制互转并存入数据库

    这篇文章主要介绍了C#实现文件与二进制互转并存入数据库,本文直接给出代码实例,代码中包含详细注释,需要的朋友可以参考下 //这个方法是浏览文件对象     private void button1_C ...

  9. 使用ORC识别图片的文字

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. 官方:MySQL 5.7 并行复制实现原理与调优 | InsideMySQL(转载)

    MySQL 5.7并行复制时代 众所周知,MySQL的复制延迟是一直被诟病的问题之一,然而在Inside君之前的两篇博客中(1,2)中都已经提到了MySQL 5.7版本已经支持“真正”的并行复制功能, ...