国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python 多維List創建的問題

Nosee / 2214人閱讀

摘要:查看一下結果,確實創建了長寬符合預期值全部都是的一個二維,感覺沒什么問題,就接著往下寫了。經過查閱文檔,將代碼修改為測試發現問題解決。

背景

最近在學Python,我覺得學習一個新語言最好的方式就是寫一個簡單的項目,所以就打算寫一個簡單的俄羅斯方塊游戲。那么在寫的過程中遇到了一個小問題。

    def __init__(self, width = 10, height = 30):
        self.width, self.height = width, height
        self.board_size = [width, height]

我用一個二維List來記錄游戲空間的狀態,game_boardx代表一個格子,0代表這格子是空的,1代表不是。很顯然,初始化的時候應該將所有的格子都賦值為0。查詢了一下List的相關文檔,發現可以用[0] * n這樣的方式來快速創建特定長度的List,因此很自然的寫出了下面這行代碼。

        self.game_board = [[0] * height] * width

查看一下結果,確實創建了長寬符合預期、值全部都是0的一個二維List,感覺沒什么問題,就接著往下寫了。

問題

但這兩天在寫消除方法的時候,使用最下面3排全是1,第四排中間是1其他全是0,這樣消除完成之后應該還剩1個1掉落到第一排。但測試過程中發現無論如何都會導致所有的1都被消除了,一開始我還以為是消除的算法有問題,但后來在每一步過程中都監控整個game_board的狀態時才發現,當一橫排有一個值為1的時候,這一橫排所有值都自動變成1了。

解決

很自然的就想到,這是由于List對象的引用產生的。[0] * height產生了長度為height并且內容全是0的List,由于0是個int,是基礎數據類型,因此這樣使用是正確的。但用這個List去進行* width操作時,產生的都是這個List的引用,而不是新建了width個List,所以修改其中任意一個就全部都修改了。
經過查閱Python文檔,將代碼修改為:

        self.game_board = [([0] * height) for i in range(width)]

測試發現問題解決。

總結

其實是很基礎的問題,對于Python *這個運算符不夠了解,因此想當然覺得代表了對對象進行深拷貝。而且可能前端做多了,對數據結構這種基礎不太敏感了吧,還是要多做練習啊。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43041.html

相關文章

  • Python學習之路21-序列構成數組

    摘要:第行把具名元組以的形式返回。對序列使用和通常號兩側的序列由相同類型的數據所構成當然不同類型的也可以相加,返回一個新序列。從上面的結果可以看出,它雖拋出了異常,但仍完成了操作查看字節碼并不難,而且它對我們了解代碼背后的運行機制很有幫助。 《流暢的Python》筆記。接下來的三篇都是關于Python的數據結構,本篇主要是Python中的各序列類型 1. 內置序列類型概覽 Python標準庫...

    ralap 評論0 收藏0
  • [零基礎學python]list和str比較

    摘要:和兩種類型數據,有不少相似的地方,也有很大的區別。偏移量從開始,總元素數減結束。和轉化這個內置函數實現的是將轉化為。在看例子之前,請看官在交互模式下做如下操作得到了對這個內置函數的完整說明。 list和str兩種類型數據,有不少相似的地方,也有很大的區別。本講對她們做個簡要比較,同時也是對前面有關兩者的知識復習一下,所謂溫故而知新。 相同點 都屬于序列類型的數據 所謂序列類型的數...

    codergarden 評論0 收藏0
  • 數據科學(1):numpy基礎

    摘要:現在到數據分析部分,先從開始環境基礎是高性能科學計算和數據分析的基礎包。花式索引花式索引指的是利用整型數組進行索引,它是將索引數組的元素的值作為目標數組的下標,來獲取目標數組下標對應的值。 最近的爬蟲學習告一段落,后續補上爬蟲的筆記。現在到數據分析部分,先從NumPy開始(環境python-3.6.5) 2019/1/23 NumPy基礎 NumPy是高性能科學計算和數據分析的基礎包。...

    ISherry 評論0 收藏0
  • Numpy數組索引與切片和變形拼接分裂

    摘要:一一維數組的索引與切片對象的內容可以通過索引或切片來訪問和修改,與中的切片操作一樣。在指定位置分裂數組本身作為一個參數,分類位置構成的列表作為第二個參數同時也可以對一維數組和多位數組進行操作。 1.概述 今天我們來講一下Numpy數組的索引與切片,numpy數組的索引與切片和Python中的切片與索引的作用相同,可以快速的取出數據,進行下一步的運用或者查看,但是兩種切片還有一些不同的地...

    miracledan 評論0 收藏0

發表評論

0條評論

Nosee

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<