在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!指定每一维数组的长度时出错

  

在Python中建立N维数组并赋初值的更多相关文章

  1. 一些Python中的二维数组的操作方法

    一些Python中的二维数组的操作方法 这篇文章主要介绍了一些Python中的二维数组的操作方法,是Python学习当中的基础知识,需要的朋友可以参考下 需要在程序中使用二维数组,网上找到一种这样的用 ...

  2. 在python中定义二维数组

    发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0 ...

  3. python中的二维数组和lamda

    python列表推导式 list=[[0 for i in xrange(3)] for j in xrange(4)] 二维数组 g=lambda x,y:x*y; print g(2,9);

  4. python中的二维数组90度旋转

    data=[[col for col in range(4)] for raw in range(4)] #创建一个二维数组 for n in data: print (n) print('\n') ...

  5. python 中初始化二维数组的方法

    最好的方法是: 初始化4*3的二维数组 a = [[0 for col in xrange(3)] for row in xrange(4)] 而不可以用: a = [[0]*3]*4 [0]*3是生 ...

  6. Py中的多维数组ndarray学习【转载】

    转自:http://blog.sciencenet.cn/home.php?mod=space&uid=3031432&do=blog&id=1064033 1. NumPy中 ...

  7. C#中读取二维数组每位的长度

    C#中的二维数组,如int[,] A=new int[a,b];则 a=A.GetLength(0);即可获得二维数组中第一维的长度. b=A.GetLength(1);即可获得二维数组中第二维的长度 ...

  8. Java中的二维数组

    Java 中的二维数组 所谓二维数组,可以简单的理解为是一种"特殊"的一维数组,它的每个数组空间中保存的是一个一维数组. 那么如何使用二维数组呢,步骤如下: 1. 声明数组并分配空 ...

  9. iOS中的二维数组

    首先我们知道OC中是没有二维数组的,二维数组是通过一位数组的嵌套实现的,但是别忘了我们有字面量,实际上可以和C/C++类似的简洁地创建和使用二维数组.这里总结了创建二维数组的两种方法以及数组的访问方式 ...

随机推荐

  1. UVA1602 Lattice Animals 网格动物 (暴力,STL)

    多联骨牌的生成办法,维基上只找到固定的骨牌fix,而free的没有找到. 于是只好写个set判重的简单枚举了. 旋转的操作,可以在坐标轴上画个点,以原点为轴心,逆时针旋转90度,新的点的坐标为(-y, ...

  2. [论文理解]Deep Residual Learning for Image Recognition

    Deep Residual Learning for Image Recognition 简介 这是何大佬的一篇非常经典的神经网络的论文,也就是大名鼎鼎的ResNet残差网络,论文主要通过构建了一种新 ...

  3. NHibernate使用之详细图解

    本文档适合初级开发者或者是第一次接触NHibernate框架的朋友,其中NHibernate不是最新的版本,但是一个比较经典的版本 NHibernate 2.1.2,其中用红线标注的部分一定要仔细看, ...

  4. CRF条件随机场简介<转>

    转自http://hi.baidu.com/hehehehello/item/3b0d1f8ba1c2e5c698255f89 CRF(Conditional Random Field) 条件随机场是 ...

  5. 四种UNIX实现

    四种UNIX实现:FreeBSD 5.2.1          Linux 2.4.22           mac OS X 10.3        Solaris 9 ubuntu 属于哪一种呢?

  6. Java中什么是匿名对象,空参构造方法输出创建了几个匿名对象,属性声明成static

    package com.swift; //使用无参构造方法自动生成对象,序号不断自增 public class Person { private static int count; //如果在定义类时 ...

  7. angular5自适应窗口大小

    import {AfterViewInit, Directive, ElementRef, HostBinding, HostListener, Inject, Input, Renderer2} f ...

  8. 【js】【转发】jreturn;、return true、return false;区别

    一.返回控制与函数结果, 语法为:return 表达式; 语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果  二.返回控制, 无函数结果,语法为:return;  在大多数情况下,为事件 ...

  9. Java多线程之Deque与LinkedBlockingDeque深入分析

    有大小的队列就叫有界队列 如 ArrayBlockingquue, 反之是无界队列 如 LinkedBlockingDeque. 单词写错了.  是的,LinkedBlockingDeque 永远满不 ...

  10. 做ios工程时,把UI从xib移动到代码中遇到的问题

    由于四期要做多语言版本,带xib页面的工程做多语言版本比较麻烦,再加上现在已经习惯了代码中的viewdidload函数中初始化控件,所以就把两个页面从xib移到代码中去了. 在修改后加载页面会遇到ba ...