1. 程式人生 > >基礎數據類型補充

基礎數據類型補充

數據 list 成了 iteration 除了 range change pri 直接

?. 基礎數據類型補充
?先關於int和str在之前的學習中已經講了80%以上了. 所以剩下的??看?看就可以了.我們補充給?個字符串基本操作

li = ["李嘉誠", "麻花藤", "?海峰", "劉嘉玲"]
s = "_".join(li)
print(s)
li = "?花?閨?"
s = "_".join(li)
print(s)

列表:
循環刪除列表中的每?個元素

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刪除試試看:

or 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‘: [‘周傑倫‘, ‘麻花藤‘]}

前?列表中的每?項都會作為key, 後?列表中的內容作為value. ?成dict
好了. 註意:

dic = dict.fromkeys(["jay", "JJ"], ["周傑倫", "麻花藤"])
print(dic)
dic.get("jay").append("胡?")
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

基礎數據類型補充