題目:list1=[1,2,3,4],怎麼做才能得到 [2,3,4],[1,3,4],[1,2,4],[1,2,3]
最近在學習python,今天學習了python中的列表,於是上csdn上看看相關的帖子和學習心得。於是瀏覽到了這篇帖子
list.index()方法詳解
在這篇帖子的最後,作者留了一道題目,也就是標題看到的題目,剛學了列表,於是就上手試著寫了一下
觀察原列表 list1 和 目標列表,是將原列表的每乙個元素都刪除一次後,新增到目標列表中去。
且每次原列表刪除的元素位置,和目標列表新增新列表的位置 是一致的。
有點繞口,表達的不是很好。
意思就是:
第一次,原列表刪除 0 號元素,變成[2,3,4],將[2,3,4]新增到目標列表的 0 號位置。
第二次,原列表刪除 1 號元素,變成[1,3,4],將[1,3,4]新增到目標列表的 1 號位置。
以此類推
1、依次遍歷原列表list1的每乙個元素each
2、記錄當次遍歷到的元素所在的下標index
3、在list1中刪除下標為index的元素
4、將刪除元素後的list1新增到目標列表list2的末尾
5、恢復list1,方便下一次迴圈時重新使用
#原列表
list1 =[1
,2,3
,4]#目標列表
list2 =
#依次遍歷原列表list1的每乙個元素each
for each in list1:
#記錄當次遍歷到的元素所在的下標index
index = list1.index(each)
#在list1中刪除下標為index的元素
list1.pop(index)
#將刪除元素後的list1新增到目標列表list2的末尾
#恢復list1,方便下一次迴圈時重新使用
list1.insert(index,each)
print
(list2)
執行結果:
[[1
,2,3
,4],
[1,2
,3,4
],[1
,2,3
,4],
[1,2
,3,4
]]顯然結果是不對的,但是邏輯上暫時找不出什麼問題
當我們滿懷信心地寫**,最後結果卻和我們預期不符時,就需要用到debug工具了,在程式的每乙個關鍵位置打上斷點,觀察**出了問題
這裡我們發現,第一次迴圈到這裡為止都按照我們預期地進行,那麼我們繼續按f8下一步:
問題來了,走出第乙個迴圈之前,我們恢復了list1的內容,以便接下來的迴圈還可以繼續使用,但是恢復了list1的同時,竟然將list2中的內容也修改了?
引用?那麼確定就是淺拷貝問題無疑了。問題出現的原因和我們猜想的應該一致。
顯然應該通過深拷貝來將修改後的 list1 新增到 list2 的對應位置。
再經過查閱,得知python中列表的切片是可以進行深拷貝的。
也就是說,我們對乙個列表切片後得到的是乙個新的列表(此處的新,是指位址不同),需要注意的是,切片時,即使是整個列表一起切(list1[:]),也會生成乙個全新的列表,這個新列表的內容(值)和舊列表(list1)相同,但位址不同。
因此我們只需要在 流程 的 第4步 處,進行修改即可
#原列表
list1 =[1
,2,3
,4]#目標列表
list2 =
#依次遍歷原列表list1的每乙個元素each
for each in list1:
#記錄當次遍歷到的元素所在的下標index
index = list1.index(each)
#在list1中刪除下標為index的元素
list1.pop(index)
#將刪除元素後的list1新增到目標列表list2的末尾:]
)#新增的是list1的乙個深拷貝,這樣後續恢復list1時,就不會影響list2的內容
#恢復list1,方便下一次迴圈時重新使用
list1.insert(index,each)
print
(list2)
執行結果:
[[2
,3,4
],[1
,3,4
],[1
,2,4
],[1
,2,3
]]
這兩點是讓我寫下這篇博文的動機吧,可能有些冗長。
祝自己在python這條道路上能學有所成吧。
python一道關於堆疊的題
利用列表來模擬堆疊。什麼是堆疊?堆疊是一種執行 後進先出 演算法的資料結構。在這裡利用列表來模擬堆疊。def push char1,l l.insert 0,char1 print l defpop y,l if len l 0 print cannot pop from an empty list...
python一道關於字典的題
建立字典。給定兩個長度相同的列表,比如說,列表 1,2,3,和 abc def ghi 用這兩個列表裡的所有資料組成乙個字典,像這樣 在這裡要用到dict.setdefault key,default 這個函式如果key在dict內部會返回key所對應的value,key不在dict內部會在dict...
python一道關於檔案操作的題
這道題是python核心程式設計裡面的題,改編了一下 因為我只實現了一部分 不同的url有不同的字尾例如.com和.cn對於不同的字尾我們要把url存到不同的合法且正確的html檔案中。首先要先解決把不同的url存到不同的檔案中。這裡要用到os模組。我們要改變當前工作目錄,把目錄設定為你想要進行操作...