python編碼小記

2022-09-04 07:21:13 字數 1637 閱讀 9780

標籤(空格分隔): 程式設計 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...