Python:二維列表的定義

寫Leetcode的時候突然出現(xiàn)的一個錯誤,想要記錄一下,也不知道起個什么標題好,所有隨便起了一個大概相關(guān)的標題

以Leetcode的題目開始引入

Leetcode的第72題

image.png

下面是解法(Python)

# 動態(tài)規(guī)劃
# 具體看leetcode講解
# 注意里面dp定義的細節(jié)
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n = len(word1)
        m = len(word2)

        if n*m == 0:
            return n+m
        
        # 下面兩種dp定義,第一種定義是錯的,因為列表內(nèi)的元素id都相同
        # dp = [[0] * (m+1)] * (n+1)
        dp = [ [0] * (m + 1) for _ in range(n + 1)]
        for i in range(n+1):
            dp[i][0] = i
        for j in range(m+1):
            dp[0][j] = j
        
        for i in range(1, n+1):
            for j in range(1, m+1):
                left = dp[i][j-1] + 1
                down = dp[i-1][j] + 1
                left_down = dp[i-1][j-1]
                if word1[i-1] != word2[j-1]:
                    left_down += 1
                dp[i][j] = min(left, down, left_down)
        return dp[-1][-1]

代碼中列表定義的區(qū)別

看代碼注意到dp = [[0] * (m+1)] * (n+1)dp = [ [0] * (m + 1) for _ in range(n + 1)]是不一樣的,兩種答案不同,后者才是我們想要的答案,那么為什么會出現(xiàn)這種不同呢?

通過一個簡單的例子來看看

image.png

我們發(fā)現(xiàn)不同元素的id是一樣的,即它們都指向同一個內(nèi)存地址。


image.png

結(jié)論

dp = [[0] * (m+1)] * (n+1)dp = [ [0] * (m + 1) for _ in range(n + 1)]打印出來一樣,但前者是列表里面n+1個元素都是指向同一個內(nèi)存地址,后者是不同的內(nèi)存地址。所以,建議定義二維列表的時候用列表生成式。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,006評論 0 2
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,701評論 0 5
  • (歡迎轉(zhuǎn)載,但請注明出處并附帶鏈接)算法好久沒復(fù)習了,今天看見一妹子在辦公室刷Leetcode,頓時我也來了興趣,...
    Nick_Zuo閱讀 738評論 0 3
  • 今天又是很喪的一天,都不知道記錄什么好。你現(xiàn)在的狀態(tài)真的是很不好,上班一副要死不活的樣子,中午特地上去找你,結(jié)果...
    forYouForUs閱讀 79評論 0 0
  • 聽說練毛筆字可以修身養(yǎng)性,于是這學期自己去報了一個書法班,一方面沉淀下自己浮躁的心,另一方面也可以提升下自己的寫字...
    31慢慢閱讀 799評論 0 0

友情鏈接更多精彩內(nèi)容