当前位置 : 主页 > 编程语言 > java >

数组(array)、列表(list)的动态初始化

来源:互联网 收集:自由互联 发布时间:2022-07-14
在python中我们如果我们需要 从其他的对象中(数组,列表,元组,字典等等) 用户自定义输入 获取我们所需要定义的数组或者列表长度,然后再进一步对数组和列表进行初始化该怎么


在python中我们如果我们需要

  • 从其他的对象中(数组,列表,元组,字典等等)
  • 用户自定义输入
  • 获取我们所需要定义的数组或者列表长度,然后再进一步对数组和列表进行初始化该怎么实现呢?这里我们讨论如何对数组和列表进行动态初始化。难点:二维列表的动态初始化

    数组的动态初始化(一维):

    import numpy as np


    class ndarrayInitialization:
    def __init__(self):
    self.num = input("Please input a string:") # abcde
    self.length = len(self.num)
    self.array = np.zeros(self.length)
    print((self.array)) # [0. 0. 0. 0. 0.]


    main = ndarrayInitialization()

    这里我们输入字符串​​abcde​​​,然后获取字符串的长度为​​5​​​,最后生成全零矩阵,我们可以看到最终的矩阵长度为​​5​​,至此,我们完成了一维动态矩阵初始化。这是一维的情况,并且矩阵的长度源于用户的输入。

    数组的动态初始化(二维):

    import numpy as np


    class ndarrayInitialization:
    def __init__(self):
    self.list = [[1, 2, 3], [3, 4, 5]]
    self.outerlength = (len(self.list))
    self.innerlength = (len(self.list[0]))
    self.size = (self.outerlength, self.innerlength)
    self.array = np.zeros(self.size)
    print((self.array))
    """
    result:
    [[0. 0. 0.]
    [0. 0. 0.]]
    """


    main = ndarrayInitialization()

    这里我们先定义一个列表对象,然后获取到它的​​size​​​为​​(2 , 3)​​​,最后将​​(2, 3)​​​作为参数传递进矩阵进行初始化,最终得到一个​​2 * 3​​大小的全零矩阵,至此,我们完成了二维动态矩阵初始化。

    列表的动态初始化(一维):
    列表的动态初始化本身就是一个伪命题,并不存在任何的难度,代码如下:

    import numpy as np


    class listInitialization:
    def __init__(self):
    self.list = [1, 2, 3]
    self.length = (len(self.list))
    self.list1 = [0] * self.length
    print((self.list1)) # [0, 0, 0]


    main = listInitialization()

    我们只需要获取列表,并且使用​​[0]​​​乘以我们所获取到的长度​​self.length​​​即可实现一维列表的初始化。
    但是为什么这里说是伪命题呢?因为通常我们在定义列表的时候并不会对列表本身进行赋值操作,而是先定义一个空列表,然后在需要的时候对其进行赋值操作。 因此我们只需要定义​​self.list1 = []​​即可。然而如果我们想要定义一个二维列表呢?此时定义一个二维全空列表就显得不那么容易了,这时我们可以采用如下代码:

    import numpy as np


    class listInitialization:
    def __init__(self):
    self.num = 5
    self.list = [[] * self.num]
    print((self.list)) # [[]]


    main = listInitialization()

    我们可以看到最终得结果为​​[[]]​​​,内层并没有像我们希望的那样出现​​5​​个列表。因此,我们需要添加一个内层循环。

    列表的动态初始化(二维):

    import numpy as np


    class listInitialization:
    def __init__(self):
    self.num = 5
    self.list = [[] * i for i in range(self.num)]
    print((self.list)) # [[], [], [], [], []]


    main = listInitialization()

    可以看到此时的结果为​​[[], [], [], [], []]​​​,这是因为​​range(self.num)​​​也就是​​range(5)​​​会产生一个​​(0,1, 2, 3, 4)​​​的序列,从上面失败的结果我们知道空列表​​[]​​​乘以任意值均为空列表​​[]​​​,​​[[] * i for i in range(self.num)]​​​相当于进行了​​[[] * 0, [] * 1, [] * 2, [] * 3, [] * 4]​​​的操作,最终得到了我们想要的初始化结果,至此我们实现了二维列表的动态初始化。


    上一篇:OpenCV 4 读入图像并保存为另一张图像
    下一篇:没有了
    网友评论