天天看點

數組(array)、清單(list)的動态初始化

在python中我們如果我們需要

  1. 從其他的對象中(數組,清單,元組,字典等等)
  2. 使用者自定義輸入

擷取我們所需要定義的數組或者清單長度,然後再進一步對數組和清單進行初始化該怎麼實作呢?這裡我們讨論如何對數組和清單進行動态初始化。難點:二維清單的動态初始化

數組的動态初始化(一維):

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()