精华内容
下载资源
问答
  • 2018-08-17 18:07:25

    写代码的时候需要使用python创建二维数组:

    num_list = [ [0]*5 ]*2
    print(num_list)

    输出:[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

    看输出觉得这种方法是对的,结果程序出现了错误,经过分析,这种创建二维数组的方式存在问题

    num_list[0][0] = 1
    print(num_list)

    输出:[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]  

    当改变num_list[0][0]的时候,num_list[1][0]也改变了

    上面创建方式等价于

    temp_list = [0]*5
    num_list = [temp_list,temp_list]

    因此 num_list[0][0] = 1  相当于 temp_list[0] = 1,所以num_list[1][0]也跟着变了

     

    正确的创建二维数组可以使用以下两种方法:

    num_list = [ [0] * 5 for i in range(2)]
    

    测试:

    print(num_list)
    num_list[0][0] = 1
    print(num_list)
    
    输出:
    [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    [[1, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

     

    或者使用numpy库

    import numpy
    num_list = numpy.zeros((2,5))

    测试:

    print(num_list)
    print(type(num_list))
    num_list[0][0] = 1
    print(num_list)
    
    输出:
    [[ 0.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]]
    <class 'numpy.ndarray'>
    [[ 1.  0.  0.  0.  0.]
     [ 0.  0.  0.  0.  0.]]

     

    更多相关内容
  • Python创建二维数组

    2020-12-25 10:38:18
    Python创建二维数组 Python中的列表list可以当做一维数组使用,但是没有直接的定义使用二维数组。如果直接使用a = [][]会产生SyntaxError: invalid syntax语法不正确错误。 一般Python创建二维数组的方法是使用...
  • Python创建二维数组

    千次阅读 2022-04-05 19:20:55
    文章目录前言实际操作一维数组二维数组总结 前言 Python并没有内置的数组类型,只有tuple,list,dict,set等内置类型。所以只能通过list模拟数组。 实际操作 一维数组 a = [i + 1 for i in range(10)] # a = [1, 2,...

    前言

    Python并没有内置的数组类型,只有tuplelistdictset等内置类型。所以只能通过list模拟数组。

    实际操作

    一维数组

    a = [i + 1 for i in range(10)]
    # a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    print('a =', a)
    b = [3] * 5
    # b = [3, 3, 3, 3, 3]
    print('b =', b)
    

    这里两种实现方式没有区别,后续可以通过下标来访问、修改其中的值。

    二维数组

    a = [[(row + 1) * (col + 1) for col in range(4)] for row in range(3)]
    # [[1, 2, 3, 4], [2, 4, 6, 8], [3, 6, 9, 12]]
    print(a)
    

    这里使用两个列表推导式的方式定义了类型二维数组的效果,后续可以通过下标来访问和修改其中的值,比如:a[2][1] = 101


    下面演示一个错误的二维数组的定义方式

    a = [[1] * 4] * 3
    # [[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
    print(a)
    a[1][0] = 101
    # [[101, 1, 1, 1], [101, 1, 1, 1], [101, 1, 1, 1]]
    print(a)
    

    这里使用两个list的乘法操作进行重复,但是其中的值只是引用拷贝,并不是深拷贝,导致a[1][0] = 101这个操作也影响了a[0]a[2]

    总结

    多使用列表推导式😄。

    展开全文
  • 下面小编就为大家带来一篇Python创建二维数组实例(关于list的一个小坑)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Python创建二维数组的正确姿势

    千次阅读 2020-12-04 20:33:44
    ↑↑↑点击上方“蓝字”...List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的...

    ↑↑↑点击上方“蓝字”,关注“极客猴”

    如果你喜欢极客猴,可以把我置顶或加为星标

    题图:by watercolor.illustrations from Instagram

    阅读文本大概需要 3 分钟。

    List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是基于 PyListObject 实现的。PyListObject 是一个变长对象,所以列表的长度是随着元素多少动态改变的。同时它还支持插入和删除等操作,所以它还是一个可变对象。

    可以简单理解为,Python 的列表是长度可变的数组。一般而已,我们用于列表创建都是一维数组。那么问题来,我们如果创建多维数组呢?

    01 列表能创建多维数组?

    列表是支持操作符,如果一个列表与 ‘ * ’ 号结合使用,能达到重复列表的效果。比如

    list_one = [0]

    list_two = [0] * 3

    print(list_one)

    print(list_two)

    >>> 运行结果:

    [0]

    [0, 0, 0]

    那么利用这个重复特性,我们是否可以来创建一个二维数组呢?于是乎,我进行一顿猛操作,结果就被我折腾出来了。

    list_one = [0]

    list_two = [[0] * 3] * 3

    print(list_one)

    print(list_two)

    >>> 运行结果:

    [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

    看起来很完美的操作,但是如果进行一些列表更新操作,问题就显露出来了。比如我对 list_two 的更换中间位置的值,即对 list_two[1][1] 进行更换值。

    list_two = [[0] * 3] * 3

    print(list_two)

    list_two[1][1] = 2

    print(list_two)

    不难发现,运行结果有点不对劲,列表中有三个位置的值也改变了。

    [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

    [[0, 2, 0], [0, 2, 0], [0, 2, 0]]

    为什么会出现在这种情况呢?原因是浅拷贝,我们以这种方式创建的列表,list_two 里面的三个列表的内存是指向同一块,不管我们修改哪个列表,其他两个列表也会跟着改变。

    如果要使用列表创建一个二维数组,可以使用生成器来辅助实现。

    list_three = [[0 for i in range(3)] for j in range(3)]

    print(list_three)

    list_three[1][1] = 3

    print(list_three)

    我们对 list_three 进行更新操作,这次就能正常更新了。

    [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

    [[0, 0, 0], [0, 3, 0], [0, 0, 0]]

    除了以上的方式,还有一种更加简洁方便的方式,就是使用 NumPy 模块。

    02 相比 List,NumPy 数组的优势

    NumPy 全称为 Numerical Python,是 Python 的一个以矩阵为主的用于科学计算的基础软件包。NumPy 和 Pandas、Matpotlib 经常结合一起使用,所以被人们合称为数据分析三剑客。

    Numpy 中有功能强大的 ndarray 对象,能创建 N 维的数组,另外还提供很多通用函数,支持对数组的元素进行操作、支持对数组进行算法运算以及提供常用的统计函数。

    相比 List 对象,NumPy 数组有以下优势:

    1.这是因为列表 list 的元素在系统内存中是分散存储的,而 NumPy 数组存储在一个均匀连续的内存块中。这样数组计算遍历所有元素,不像列表 list 还需要对内存地址进行查找,从而节省了计算资源。

    2.Numpy数组能够运用向量化运算来处理整个数组,速度较快;而 Python 的列表则通常需要借助循环语句遍历列表,运行效率相对来说要差。

    3.NumPy 中的矩阵计算可以采用多线程的方式,充分利用多核 CPU 计算资源,大大提升了计算效率。

    4.Numpy 使用了优化过的 C API,运算速度较快。

    03 创建数组

    前面说到 NumPy 的主要对面是 ndarray 对象,它其实是一系列同类型数据的集合。因为 ndarray 支持创建多维数组,所以就有两个行和列的概念。

    创建 ndarray 的第一种方式是利用 array 方式。

    import numpy as np

    # 创建一维数组

    nd_one = np.array([1, 2, 3])

    # 创建二维数组

    nd_two = np.array([[1, 2, 3], [4, 5, 6]])

    print(nd_one)

    print(nd_two)

    print('nd_two.shape =', nd_one.shape)

    print('nd_two.shape =', nd_two.shape)

    >>> 运行结果:

    [1 2 3]

    [[1 2 3]

    [4 5 6]]

    nd_two.shape = (3,)

    nd_two.shape = (2, 3)

    其中 shape 是数组的一个属性,表示获取数组大小(有多少行,有多少列),如果是一维数组,则只显示(行,)。代码中打印出 nd_two 的形状,输出为(2,3),表示数组中有 2 行 3 列。

    第二种办法则使用 Numpy 的内置函数

    1.使用arange 或 linspace 创建连续数组。

    import numpy as np

    # arange() 类似Python内置函数的 range()

    # arange(初始值, 终值, 步长) 不包含终值

    x0 = np.arange(1, 11, 2)

    print(x0)

    # 创建一个 5x3 的数组

    x1 = np.arange(15).reshape((5, 3))

    print(x1)

    # linspace()线性等分向量

    # linspace(初始值, 终值, 元素个数) 包含终值

    x2 = np.linspace(1, 11, 6)

    print(x2)

    >>> 运行结果:

    [1 3 5 7 9]

    [[ 0  1  2]

    [ 3  4  5]

    [ 6  7  8]

    [ 9 10 11]

    [12 13 14]]

    [  1.   3.   5.   7.   9.  11.]

    虽然 np.arange 和 np.linspace 起到的作用是一样的,都是创建等差数组,但是创建的方式是不同的。

    2.使用 zeros(),ones(),full() 创建数组

    import numpy as np

    # 创建一个 3x4 的数组且所有值全为 0

    x3 = np.zeros((3, 4), dtype=int)

    print(x3)

    # 创建一个 3x4 的数组且所有元素值全为 1

    x4 = np.ones((3, 4), dtype=int)

    print(x4)

    # 创建一个 3x4 的数组,然后将所有元素的值填充为 2

    x5 = np.full((3, 4), 2, dtype=int)

    print(x5)

    >>> 运行结果:

    [[0 0 0 0]

    [0 0 0 0]

    [0 0 0 0]]

    [[1 1 1 1]

    [1 1 1 1]

    [1 1 1 1]]

    [[2 2 2 2]

    [2 2 2 2]

    [2 2 2 2]]

    3.使用 eye() 创建单位矩阵

    import numpy as np

    # 创建 3x3 的单位矩阵

    x6 = np.eye(3, dtype=int)

    print(x6)

    >>> 运行结果:

    [[1 0 0]

    [0 1 0]

    [0 0 1]]

    4.使用 diag() 创建对角矩阵

    diag() 是创建一个 NxN 的对角矩阵,对角矩阵是对角线上的主对角线之外的元素皆为 0 的矩阵。

    import numpy as np

    x7 = np.diag([1, 2, 3])

    print(x7)

    >>> 运行结果:

    [[1 0 0]

    [0 2 0]

    [0 0 3]]

    5.使用 random 创建随机数组

    numpy 中的 random 中有很多内置函数,能简单介绍其中的几种。

    import numpy as np

    # 创建 2x2 数组且所有值是随机填充

    x9 = np.random.random((2, 2))

    print(x9)

    # 创建一个值在 [0, 10) 区间的 3x3 的随机整数

    x10 = np.random.randint(0, 10, (3, 3))

    print(x10)

    >>> 运行结果:

    [[ 0.77233522  0.41516417]

    [ 0.22350126  0.31611254]]

    [[0 6 5]

    [7 6 4]

    [5 5 9]]

    —END—

    展开全文
  • di_demo2() two_di_demo3() 运行结果如下: F:\dev\python\python.exe F:/pyCharm/pratice/twodi_list/demo_1.py [[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, 0, 0, 0, 0, 0...

    废话不多说,直接上代码:

    #coding=utf-8

    def two_di_demo1():

    a=[]

    for i in range(10):

    a.append([])

    for j in range(10):

    a[i].append(0)

    print(a)

    def two_di_demo2():

    a=[]

    for i in range(10):

    a.append([])

    for j in range(10):

    a[i].append(0)

    print(a)

    b = [[0] * 10] * 10

    print(b)

    print(a==b)

    b[1][0]=1

    print(b)

    def two_di_demo3():

    c=[[0 for i in range(10)] for i in range(10)]

    print(c)

    if __name__=="__main__":

    two_di_demo1()

    two_di_demo2()

    two_di_demo3()

    运行结果如下:

    F:\dev\python\python.exe F:/pyCharm/pratice/twodi_list/demo_1.py

    [[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, 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], [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, 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]]

    [[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, 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], [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, 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]]

    [[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, 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], [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, 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]]

    True

    [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 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, 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, 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, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

    Process finished with exit code 0

    展开全文
  • dp = [[0]*l for _ in range(l)] 和 dp = [[0] * len(s)] * len(s) 推荐第一种 第二种方法下这么生成的二维数组 里面每一行的内存地址都一样 改一个dp[0][0]所有的dp[x][0]都生效了
  • python 创建二维数组和一维数组

    千次阅读 2019-07-10 08:48:35
    写代码的时候需要使用python创建二维数组: num_list = [ [0]*5 ]*2 print(num_list) 输出:[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 看输出觉得这种方法是对的,结果程序出现了错误,经过分析,这种创建二维数组的...
  • python 创建二维数组

    2021-11-20 10:52:24
    用列表声明 声明一个row行line列的二维数组,并且初始化为0 代码; ls = [([0]*row)for i in range(line)] # 声明二维数组
  • List (列表)是 Python 中最基本的数据结构。在用法上,它有点类似数组,因为每个列表都有一个下标,下标从 0 开始。因此,我们可以使用 list[1] 来获取下标对应的值。如果我们深入下列表的底层原理,会发现列表是...
  • 我们已经很熟悉在C++上创建一维二维数组了,那么如何在Python创建二维数组呢 >>> A = [0]*3 >>> B = [[0]*2]*3 这样就可以得到我们的一维数组和二维数组了,我们可以看一下结果 >>> A...
  • 在C中输入二维数组形式非常熟悉(采用codeblocks):输入一行的数字,每个之间空格隔开,回车继续输下一行在python中采用同样的形式输入(采用PyCharm):代码如下:输入:其中输入3-&gt;回车,输入4-&gt;...
  • 分析数据时经常会用到二维数组,通常需要创建一个元素均为0的数组。 一种常为采用的方法: Matri = [[0 for i in range(col)] for j in range(row)] 行数:row 列数:col row = 4 col = 3 Matrix = [[0 for i ...
  • python如何创建二维数组

    千次阅读 2021-12-12 16:50:54
    关于python中的二维数组,主要有list和numpy.array两种。好吧,其实还有matrices,但它必须是2维的,而numpy arrays (ndarrays) 可以是多维的。 两者可以相互转化。下边是两者区别 数组list >>import numpy...
  • python创建二维数组的两种常用方法

    千次阅读 2020-06-08 17:49:38
    目的:生成初始值位0的m*n的二维数组 1.使用list方法 arr = [[0 for i in range(n)] for j in range(m)] 2.使用Numpy模块 arr = numpy.zeros((m, n)) 误区: arr = [[0]*n]*m 使用该方法生成的二维数组...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,763
精华内容 18,705
关键字:

python创建二维数组