1. 程式人生 > >python基礎學習筆記——列表技巧

python基礎學習筆記——列表技巧

列表: 迴圈刪除列表中的每⼀個元素

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