真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python中如何使用for循環(huán)remove同一個list-創(chuàng)新互聯(lián)

這篇文章給大家分享的是有關python中如何使用for循環(huán)remove同一個list的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供海東企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站制作、成都做網(wǎng)站、外貿營銷網(wǎng)站建設H5場景定制、小程序制作等業(yè)務。10年已為海東眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。

代碼片段1

#!/usr/bin/python 
# encoding: utf-8  
# -*- coding: utf8 -*-  
import re  
list_to_test = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']  
for member in list_to_test:  
 if re.search('^#+.*', member) is not None:  
  list_to_test.remove(member)  
print list_to_test

結果1:

['# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']

代碼片段2

#!/usr/bin/python 
# encoding: utf-8  
# -*- coding: utf8 -*-  
list_to_test = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']  
list_to_test.remove('# ')  
list_to_test.remove('# conf')  
print list_to_test

# 結果2:

['NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']

本以為上述兩個代碼的結果應該是一樣的,結果不一樣。

分析:

原因是不能在for循環(huán)中用remove同一個列表(遍歷中刪除)。當remove這個list中的元素時,list的長度發(fā)生了變化,for循環(huán)就會受到影響(這個python版本(2.7.x沒有明顯的報錯,可能作者并不認為這是一個issue或bug,但給點提示也是好的?。?。

解決辦法:

用一個新的列表(list)去代替循環(huán)中的list或者代替remove操作的list。在創(chuàng)建新的列表是可以用cpoy模塊中的deepcopy方法也可以用new_list = old_list[:]的方法,如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
import re
from copy import deepcopy

old_list = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']
new_list = deepcopy(old_list)
for member in new_list:
 if re.search('^#+.*', member) is not None:
  old_list.remove(member)
print old_list

有趣(令人困惑)的是切片也是淺復制,但利用切片也可以實現(xiàn)上述功能,代碼如下:

#!/usr/bin/python
# encoding: utf-8
# -*- coding: utf8 -*-
import re
old_list = ['# ', '# conf', 'NAME="Ubuntu"', 'VERSION="14.04.3 LTS, Trusty Tahr"']
new_list = old_list[:]
for member in new_list:
 if re.search('^#+.*', member) is not None:
  old_list.remove(member)
print old_list

上述導致錯誤發(fā)生的例子(在for循環(huán)中用remove同一個列表)可以認知為這個操作是修改對象勢必影響此對象,要想修改一個對象卻不影響此對象引用,則需要對象復制。如果你想修改一個對象,而且想讓原始的對象不受影響,那你就需要對象復制。

附加知識點:

關于淺復制(淺拷貝)

對象的淺復制(shallow copy):它雖然復制了對象,但對于對象中的元素,依然使用引用.

(1)、使用切片[:]操作進行拷貝 (注釋:切片只復制了對象的頂層,對對象的下一層還是引用,舉個例子:[1,2,3,[4,5,6]])

(2)、使用工廠函數(shù)(如list/dir/set)等進行拷貝

(3)、copy.copy()

(4)、=(賦值)操作(注釋:原文沒有,此處是新添加的,根據(jù)“對象的賦值實際上是對象的引用”添加)

如果希望復制一個容器對象,以及它里面的所有元素(包含元素的子元素),使用copy.deepcopy這個方法會消耗一些時間和空間。不過,如果你需要完全復制,這是唯一的方法。

注意:

1、對于非容器類型(如數(shù)字、字符串、和其他‘原子'類型的對象)沒有被拷貝一說。

2、如果元組變量只包含原子類型對象,則不能深copy。

感謝各位的閱讀!關于“python中如何使用for循環(huán)remove同一個list”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


分享文章:python中如何使用for循環(huán)remove同一個list-創(chuàng)新互聯(lián)
標題鏈接:http://weahome.cn/article/ccghcs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部