關於Python列表的一道題

2021-10-07 22:47:47 字數 2483 閱讀 4525

題目: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模組。我們要改變當前工作目錄,把目錄設定為你想要進行操作...