python基礎學習筆記——列表技巧
阿新 • • 發佈:2019-01-04
列表: 迴圈刪除列表中的每⼀個元素
li = [11, 22, 33, 44] for e in li: li.remove(e) print(li) 結果: [22, 44]
分析原因: for的運⾏過程. 會有⼀個指標來記錄當前迴圈的元素是哪⼀個, ⼀開始這個指標指向第0 個.
然後獲取到第0個元素. 緊接著刪除第0個. 這個時候. 原來是第⼀個的元素會⾃動的變成 第0個.
然後指標向後移動⼀次, 指向1元素. 這時原來的1已經變成了0, 也就不會被刪除了.
⽤pop刪除試試看:
li = [11, 22, 33, 44] for i in range(0, len(li)): del li[i] print(li) 結果: 報錯 # i= 0, 1, 2 刪除的時候li[0] 被刪除之後. 後⾯⼀個就變成了第0個. # 以此類推. 當i = 2的時候. list中只有⼀個元素. 但是這個時候刪除的是第2個 肯定報錯啊
經過分析發現. 迴圈刪除都不⾏. 不論是⽤del還是⽤remove. 都不能實現. 那麼pop呢?
for el in li: li.pop() # pop也不⾏ print(li) 結果: [11, 22]
只有這樣才是可以的:
for i in range(0, len(li)): # 迴圈len(li)次, 然後從後往前刪除 li.pop() print(li)
或者. ⽤另⼀個列表來記錄你要刪除的內容. 然後迴圈刪除
li = [11, 22, 33, 44] del_li = [] for e in li: del_li.append(e) for e in del_li: li.remove(e) print(li)
注意: 由於刪除元素會導致元素的索引改變, 所以容易出現問題. 儘量不要再迴圈中直接去刪 除元素. 可以把要刪除的元素新增到另⼀個集合中然後再批量刪除.
dict中的fromkey(),可以幫我們通過list來建立⼀個dict
dic = dict.fromkeys(["jay", "JJ"], ["周杰倫", "麻花藤"]) print(dic) 結果: {'jay': ['周杰倫', '麻花藤'], 'JJ': ['周杰倫', '麻花藤']}
程式碼中只是更改了jay那個列表. 但是由於jay和JJ⽤的是同⼀個列表. 所以. 前⾯那個改了. 後面那個也會跟著改
dict中的元素在迭代過程中是不允許進⾏刪除的
dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'} # 刪除key中帶有'k'的元素 for k in dic: if 'k' in k: del dic[k] # dictionary changed size during iteration, 在迴圈迭 代的時候不允許進⾏刪除操作 print(dic)
那怎麼辦呢? 把要刪除的元素暫時先儲存在⼀個list中, 然後迴圈list, 再刪除
dic = {'k1': 'alex', 'k2': 'wusir', 's1': '⾦⽼板'} dic_del_list = [] # 刪除key中帶有'k'的元素 for k in dic: if 'k' in k: dic_del_list.append(k) for el in dic_del_list: del dic[el] print(dic)
型別轉換:
元組 => 列表 list(tuple)
列表 => 元組 tuple(list)
list=>str str.join(list)
str=>list str.split()
轉換成False的資料:
0,'',None,[],(),{},set() ==> False