zoukankan      html  css  js  c++  java
  • 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('33[32;1m请输入N维数组: 33[0m').strip()     # 获取一个N的数字
            if number == '':
                continue
            if number.isdigit():
                n = int(number)
                if n > 0 and n <= 26:
                    break
                else:
                    print('33[31;1m输入的N数字超出范围,请重新输入!33[0m')
                    continue
            else:
                print('33[31;1m输入的N有误,请重新输入!33[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('
    第%s次转换后的数据结果' % (r+1))
            for i in range(n):
                print(data[i])
        return data
    
    if __name__ == '__main__':
        n = get_number()    # 返回一个n
        print('顺时针旋转90度 33[31;1m%s33[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('
    最终转换后得到的数据')
        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'33[32;1m请输入N维数组: 33[0m').strip()     # 获取一个N的数字
            if number == '':
                continue
            if number.isdigit():
                n = int(number)
                if n > 0 and n <= 26:
                    break
                else:
                    print(u'33[31;1m输入的N数字超出范围,请重新输入!33[0m')
                    continue
            else:
                print(u'33[31;1m输入的N有误,请重新输入!33[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'
    第%s次转换后的数据结果' % (r+1))
            for i in range(n):
                print(data[i])
        return data
    
    if __name__ == '__main__':
        n = get_number()    # 返回一个n
        print(u'顺时针旋转90度 33[31;1m%s33[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'
    最终转换后得到的数据')
        for i in range(n):
            print(data[i])
    
    
    

      

     

     

  • 相关阅读:
    《DSP using MATLAB》 示例 Example 9.12
    《DSP using MATLAB》示例 Example 9.11
    《DSP using MATLAB》示例 Example 9.10
    《DSP using MATLAB》示例Example 9.9
    《DSP using MATLAB》示例 Example 9.8
    《DSP using MATLAB》示例Example 9.7
    《DSP using MATLAB》示例 Example 9.6
    《DSP using MATLAB》示例Example 9.5
    《DSP using MATLAB》示例 Example 9.4
    (转载)【C++11新特性】 nullptr关键字
  • 原文地址:https://www.cnblogs.com/suke99/p/5183993.html
Copyright © 2011-2022 走看看