成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

Nosee / 2222人閱讀

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

背景

最近在學(xué)Python,我覺得學(xué)習(xí)一個(gè)新語言最好的方式就是寫一個(gè)簡(jiǎn)單的項(xiàng)目,所以就打算寫一個(gè)簡(jiǎn)單的俄羅斯方塊游戲。那么在寫的過程中遇到了一個(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)建特定長(zhǎng)度的List,因此很自然的寫出了下面這行代碼。

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

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

問題

但這兩天在寫消除方法的時(shí)候,使用最下面3排全是1,第四排中間是1其他全是0,這樣消除完成之后應(yīng)該還剩1個(gè)1掉落到第一排。但測(cè)試過程中發(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對(duì)象的引用產(chǎn)生的。[0] * height產(chǎn)生了長(zhǎng)度為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)]

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

總結(jié)

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

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/43041.html

相關(guān)文章

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

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

    ralap 評(píng)論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)化為。在看例子之前,請(qǐng)看官在交互模式下做如下操作得到了對(duì)這個(gè)內(nèi)置函數(shù)的完整說明。 list和str兩種類型數(shù)據(jù),有不少相似的地方,也有很大的區(qū)別。本講對(duì)她們做個(gè)簡(jiǎn)要比較,同時(shí)也是對(duì)前面有關(guān)兩者的知識(shí)復(fù)習(xí)一下,所謂溫故而知新。 相同點(diǎn) 都屬于序列類型的數(shù)據(jù) 所謂序列類型的數(shù)...

    codergarden 評(píng)論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)對(duì)應(yīng)的值。 最近的爬蟲學(xué)習(xí)告一段落,后續(xù)補(bǔ)上爬蟲的筆記?,F(xiàn)在到數(shù)據(jù)分析部分,先從NumPy開始(環(huán)境python-3.6.5) 2019/1/23 NumPy基礎(chǔ) NumPy是高性能科學(xué)計(jì)算和數(shù)據(jù)分析的基礎(chǔ)包。...

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

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

    miracledan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<