成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python 多維List創(chuàng)建的問題

Nosee / 2271人閱讀

摘要:查看一下結(jié)果,確實(shí)創(chuàng)建了長寬符合預(yù)期值全部都是的一個(gè)二維,感覺沒什么問題,就接著往下寫了。經(jīng)過查閱文檔,將代碼修改為測試發(fā)現(xiàn)問題解決。

背景

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

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

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

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

查看一下結(jié)果,確實(shí)創(chuàng)建了長寬符合預(yù)期、值全部都是0的一個(gè)二維List,感覺沒什么問題,就接著往下寫了。

問題

但這兩天在寫消除方法的時(shí)候,使用最下面3排全是1,第四排中間是1其他全是0,這樣消除完成之后應(yīng)該還剩1個(gè)1掉落到第一排。但測試過程中發(fā)現(xiàn)無論如何都會(huì)導(dǎo)致所有的1都被消除了,一開始我還以為是消除的算法有問題,但后來在每一步過程中都監(jiān)控整個(gè)game_board的狀態(tài)時(shí)才發(fā)現(xiàn),當(dāng)一橫排有一個(gè)值為1的時(shí)候,這一橫排所有值都自動(dòng)變成1了。

解決

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

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

測試發(fā)現(xiàn)問題解決。

總結(jié)

其實(shí)是很基礎(chǔ)的問題,對于Python *這個(gè)運(yùn)算符不夠了解,因此想當(dāng)然覺得代表了對對象進(jìn)行深拷貝。而且可能前端做多了,對數(shù)據(jù)結(jié)構(gòu)這種基礎(chǔ)不太敏感了吧,還是要多做練習(xí)啊。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/43041.html

相關(guān)文章

  • Python學(xué)習(xí)之路21-序列構(gòu)成數(shù)組

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

    ralap 評論0 收藏0
  • [零基礎(chǔ)學(xué)python]list和str比較

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

    codergarden 評論0 收藏0
  • 數(shù)據(jù)科學(xué)(1):numpy基礎(chǔ)

    摘要:現(xiàn)在到數(shù)據(jù)分析部分,先從開始環(huán)境基礎(chǔ)是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包?;ㄊ剿饕ㄊ剿饕傅氖抢谜蛿?shù)組進(jìn)行索引,它是將索引數(shù)組的元素的值作為目標(biāo)數(shù)組的下標(biāo),來獲取目標(biāo)數(shù)組下標(biāo)對應(yīng)的值。 最近的爬蟲學(xué)習(xí)告一段落,后續(xù)補(bǔ)上爬蟲的筆記。現(xiàn)在到數(shù)據(jù)分析部分,先從NumPy開始(環(huán)境python-3.6.5) 2019/1/23 NumPy基礎(chǔ) NumPy是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。...

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

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

    miracledan 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<