Python數組建立中的這些坑,你造嗎?

來源:互聯網
上載者:User

標籤:

本文和大家分享的主要是python 中建立數組過程中的一些坑,一起來看看吧,希望對大家 學習python 有所協助。 1、問題的引出在做leetcode 的題目時,遇到了一個求數組中出現次數最多的 k 個元素的題,參照答案的思路,首先利用一個 dict 記錄所有元素出現的次數, key:value 中的 key 表示元素, value 表示元素出現的次數,隨後根據元素出現的次數將元素放入對應的桶中,桶是一個二維數組,桶中第一個元素儲存出現次數為 0 的元素,桶中第二個元素儲存出現次數為 1 的元素,依次類推。最後從後往前遍曆桶,取出出現次數最多的 k 個元素即可。按照這樣的思路,我寫了如下的代碼: class  Solution(object): def  topKFrequent(self, nums, k):""":type nums: List[int]:type k: int:rtype: List[int]"""bucket1 = [[]] * (len(nums) + 1)freq_map = dict() for num  in nums:freq_map[num] = freq_map.get(num,0) + 1 print (freq_map) for key  in freq_map:#bucket[freq_map[key]].append(key)bucket1[freq_map[key]].append(key)res = [] for i  in range(len(bucket1)-1,-1,-1):res += bucket1  if len(res) >= k: return res[:k] s = Solution()print (s.topKFrequent([4,1,-1,2,-1,2,3],2)) 看似完美無缺啊,不過結果不對啊,結果輸出了1和2,不應該是-1和2麼,於是我列印了bucket1,發現是這樣的: [[1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1], [1, 2, 3, 4, -1]] 為什麼所有的元素都一樣呢? 於是 我換了一種方法建立bucket: bucket = [[] for _ in range(len(nums)+1)] 結果正常,此時bucket的輸出為: [[], [1, 3, 4], [2, -1], [], [], [], [], []] 那麼,看似一樣的建立bucket的方法,為什麼輸出會不一樣呢? 2、問題的解釋 問題就在與,第一種即使用*建立數組時,數組中的每一個元素都是同一個list object,那麼往任意一個中添加元素,實際上是往所有的元素中添加,所以會出現之前的結果,而用列表產生式的方法,不會有問題,因為每一個list都是不同的list object,我們來看一看下面的代碼: bucket = [[] for _ in range(len(nums)+1)] bucket1 = [[]] * (len(nums) + 1) print (bucket)print (bucket1) print (id(bucket1[0]),id(bucket1[1])) print(id(bucket[0]), id(bucket[1])) 輸出為: [[], [], [], [], [], [], [], []] [[], [], [], [], [], [], [], []] 4342035336 4342035336 4342034568 4342034952 可以看到,bucket1中的每一個元素的id都是相同的,說明是同一個元素,而bucket中的每一個元素的id是不同的,說明是不同的元素。 來源:簡書

Python數組建立中的這些坑,你造嗎?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.