標籤(空格分隔): 程式設計 python
列表物件執行remove()函式後,會自動退出迴圈,所以如果想利用乙個單獨的for迴圈刪除列表中多個成員,是辦不到的,可嘗試使用多重迴圈。
例如下面的**:
for item in test_list:
if item == 0:
test_list.remove(item)
如果test_list中為0的項多於兩個,那麼此迴圈在刪除第乙個0後便會退出迴圈,無法利用乙個迴圈刪除其中所有為零的項!字典也是如此。細想想,應該是remove後test_list發生了變化,無法繼續迭代。
如果乙個列表或字典中,有元素為類物件(列表或字典中儲存的應是物件的引用),那麼用copy模組中deepcopy()進行拷貝後,相應引用位址會發生變化,相當於是類利用相同引數初始化的不同例項。
class driver(object):
def __init__(self, name):
self.name = name
......
......
driver_list =
driver1 = driver('str1')
driver2 = driver('str2')
copy_list = deepcopy(driver_list)
for item in driver_list:
if item.name == 'str1':
copy_list.remove(item)
......
在執行到最後的for迴圈中remove語句時,會提示列表中找不到物件。原因就是在deepcopy時對driver類物件也進行了複製,複製產生的copy_list中項與原來driver_list中項,分配記憶體位址定然不同,而相應列表中存放的都是他們的引用(也就是位址),在copy_list中找不到相應元素也就順理成章了。
先看如下幾行**:
str1 = ' this is my test! '
list1 = ['this', 'is', 'my', 'test', ' ']
str1.strip()
for item in str1.split(' '):
.......
list2 = list1.remove(' ')[:2]
這段**在執行時,line.3中str1執行了strip()後的值並未儲存,str1值不變, for迴圈中 item還是會取到兩個空值。line.6執行會報錯typeerror,因remove()後無返回值,相當於對nonetype型物件切分。
究其原因就是因為可變物件與不可變物件的區分。字串、元組、數字等均是不可變物件,字串strip()後會產生乙個新字串,原變數str1的值不會改變,必須儲存下新字串才能使用;而列表、字典等可變物件,執行remove()等函式(不會有返回值)改變其值後,原變數值就已經改變,可直接使用原變數。
正確**:
str2 = str1.strip()
for item in str2.split(' '):
.......
list1.remove(' ')
list2 = list1[:2]
Python編碼小記
當用python讀取檔案時,檔案的編碼方式與讀取檔案的方式似乎很有意思.一小段python 如下 coding utf 8 if name main str open content.txt r readline str.decode gbk encode utf 8 注意這行隱掉了 str.dec...
Python 編碼踩坑小記
coding utf 8 print repr u 我愛你 print repr u u6211 u7231 u4f60 print repr u 我愛你 encode utf 8 print 內容utf 8實際unicode使用下面兩種都可以編碼成功 print repr u xe6 x88 x9...
前端 前端編碼規範小記
定位 position left right top bottom z index 盒子模型 display float width height margin padding border border radius 排印 font color background line height tex...