zoukankan      html  css  js  c++  java
  • 在Python中建立N维数组并赋初值

    在Python中,由于不像C++/Java这样的语言可以方便的用a[i][j]=0的方式,建立二维数组并赋初值,所以需要一个相对巧妙的方法。

    可以用列表解析的方式,eg:

    >>> mat=[[0 for i in range(5)] for j in range(5)]
    >>> mat
    [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

    这样就建立了一个二维5X5的数组并把初值设置为0.

    下面给一个建立MXN的二维数组,并把初值设为x的函数:

    def Get_MXN_Array_initx(m,n,x):
        return [[x for i in range(m)] for j in range(n)]

    如果要建立三维数组可以用类似的方式,以下是一个函数,建立多维的,每一维长度都可以指定,所有元素初始值为x的数组。

    参数:m为整数,表示数组的维度;n为数组,储存每一维数组的长度

    感谢dearchi指出下列代码中的错误,已改正。

    原理:在使用低维数组生成高维数组的过程中,确实应当使用deepcopy复制低维数组,不然会导致高维数组中的每个元素实际上都是同一个低维数组,当有一个低维数组被修改,高维数组中的其他低维数组也跟着被修改了,即“牵一发而动全身”。详见dearchi的评论。

    import copy
    def
    Get_Mdimensions_NlengthArray_initValuex(m,n,x): if m!=len(n): print("Error!指定每一维数组的长度时出错") else: result=[x for i in range(n[-1])] dimensions_num=1 while dimensions_num<m: result=[copy.deepcopy(result) for i in range(n[-1-dimensions_num])] dimensions_num+=1 return result

    eg:我们创建一个2维,3X2,初始值为0的数组,各维度的长度以数组的形式传入参数n:

    >>> Arr=Get_Mdimensions_NlengthArray_initValuex2(2,[3,2],0)
    >>> Arr
    [[0, 0], [0, 0], [0, 0]]

    当传入维度数组的长度与数组维度不匹配时:

    >>> Arr=Get_Mdimensions_NlengthArray_initValuex2(2,[3,2,3],0)
    Error!指定每一维数组的长度时出错

      

  • 相关阅读:
    20161115学习笔记
    20161114学习笔记
    微服务
    20161111学习笔记
    20161110学习笔记
    统一ID生成服务
    BlockingQueue原理
    spring常用注解
    Spring 事件发布
    java8 DateUtil工具
  • 原文地址:https://www.cnblogs.com/ArsenalfanInECNU/p/4793354.html
Copyright © 2011-2022 走看看