列表和字典循环遍历时的删除问题,集合
1.for 循環(huán)的問題 : for 循環(huán)后面也有else,也可以使用break和continue(使用方法跟while一樣).
? ? while? ? 條件:? ? ? ? ? ? ? ? ? ?for? 變量 in 迭代器:? ? ? ? ?
? ? ? ? ? ? ?循環(huán)體? ? ? ? ? ? ? ? ? ? ? ? ? ? ?代碼塊
? ? else:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else:
? ? ? ? ? ? 代碼塊? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 代碼塊
2 .str 操作
? s = ["a","b","c","d"]? ? ? ? ? ? join()是把列表變字符串,用前面的字符串把列表連接起來,返回新的字符串.
? a = "_".join(s)
? print(a)? ? ? 得到的結(jié)果是"a_b_c_d"
?
? ?s = "金毛獅王"? ? ?
? ?a = "_".join(s)? ? ? ? ? ?join()迭代,把每一項進行拼接.
? ?print(a)? ? 得到的結(jié)果是"金_毛_獅_王"
? ?補充:? join()把列表變成字符串.
? ? ? ? ? ? ? split()把字符串切割轉(zhuǎn)換成列表.
?添加一個知識點:? if (b.startswith("A") or b.startswith("a")) and b.endswith("c") :? ? ? ? ? ? ? ? ? ? ? ? ?和 if("小粉嫩" or "大鐵錘") in a:? ? 這兩個條件判斷看著很像,感覺理論上邏輯是一樣的,其實不然,因為("小粉嫩" or "大鐵錘")這個邏輯運算出來的結(jié)果必然是? "小粉嫩"? ? 所以小面的條件就會變成 :if? ?"小粉嫩"? in? a:? ? 而第一個條件判斷里面的? b.startswith("A") 是判斷是不是以? "A"? 開頭,如果是,條件就會變成? if? b.startswith("A")? and? b.endswith("c") :? ? ?如果否,條件就會變成? if? b.startwith("a")? and? ?b.endswith("c") :? ?所以這兩個條件是不一樣的.
3. list 的刪除問題
例:刪除列表lst = [1,2,4,5,7]里面的元素.
? ? for? i in lst:? ? ? ? ? ? ? 這是一個錯誤的示范:
? ? ? ?lst.remove(i)
? ? print(lst)
?lst列表里的元素刪不干凈,原因是因為由于刪除元素會導(dǎo)致元素的索引改變,所以容易出現(xiàn)問題,盡量不要直接刪除,簡易方法有兩種.
第一種:是建立一個新列表? ? ? ? ? ? ? ? ? 第二種方法:
? ? ? ? ??lst = [1,2,4,5,7]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ??lst = [1,2,4,5,7]?
? ? ? ? ?lst1 = []? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? for? i? in? range(len(lst)):
? ? ? ? ? for? i in lst:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? lst.pop()
? ? ? ? ? ? ? lst1.append(i)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print(lst)
? ? ? ? ? for? a in lst1:
? ? ? ? ? ? ? lst.remove(a)
? ? ? ? ? print(lst)
?
? ??
? 字典的知識補充: dict中的fromkey()可以幫我們通過list來創(chuàng)建一個list.
? ?例:? dic = dict.fromkeys(["jay","JJ"],"周杰倫")
? ? ? ? ? ?print(dic)
? ? ? ? ?得到的結(jié)果是{"Jay":"周杰倫","JJ":"周杰倫"}
? 這個就是把第一個參數(shù)中的每一項拿出來和第二個參數(shù)組成一個鍵值對.生成出來的鍵指向的value是同一個對象,改變其中一個的時候,另一個也會跟著改變.
? ? dict中的元素在迭代過程中是不允許刪的.
? ? dic的刪除: dic = {1:2,2:3,3:4}
? ? ? ? ? ? ? ? ? ? ? lst = [2]? ? ? ? ? ? ? ? 把要刪除的鍵放在列表中,循環(huán)列表,刪除字典.
? ? ? ? ? ? ? ? ? ? ? for i in lst:
? ? ? ? ? ? ? ? ? ? ? ? ?dic.pop(i)
? ? ? ? ? ? ? ? ? ? ? ?print(dic)
? ? ?類型的轉(zhuǎn)換:? ?元組 => 列表? ? ? ? ? ?list(tuple)
? ? ? ? ? ? ? ? ? ? ? ? ? ?列表 => 元組? ? ? ? ? ?tuple(list)
? ? ? ? ? ? ? ? ? ? ? ? ? ?list? =>? str? ? ? ? ? ? ? ?join()
? ? ? ? ? ? ? ? ? ? ? ? ? ?str? ?=>? list? ? ? ? ? ? ? split()
? ? ? ? ? ? ??
? 轉(zhuǎn)換成False的數(shù)據(jù)有哪些:? 0 ,"" ,[]? ,{}? ,None , set().
4 .set集合.? 不重復(fù),無序,里面的元素不可變(可哈希).set本身是不可哈希的,set是可變的.
? ? set里面的元素跟字典里的key 是一樣的, key是不會重復(fù),無序.
? ? ?set集合用{} 大括號表示.? s = {} 錯誤, s = set()? 或者? s = set({})
? set 最大的功能是:去重復(fù).
? ? ? ?集合(set) => list? ? ? ? ? ? ? list(set)
? ? ? ?list? =>? 集合(set)? ? ? ? ? ? set(list)
? set 集合的增刪改查:
? ? ? ?增:? add ,? update? ? ? ? ? ? ? ? ?s = set()? ? ? ? ? ? ? ? ? ? ? ? s = set()? ? ? ? ? ? ? ? ? ? ? update是一個一個加
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?s.add("wo")? ? ? ? ? ? ? ? ? ? s.update(["zh","ni"])? ? 進去.
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?print(s)? ? ? ? ? ? ? ? ? ? ? ? ? ? print(s)
? ?刪除? ?
? ? ? ? ? s.pop(? )? 彈一個出來? ? ?有返回值.
? ? ? ? ? print(s)? ? ?隨機刪除
? ? ? ? ?remove()? ?直接刪,如果刪除的元素不存在,會報錯.
? ? ? ? 空集合顯示set()? 跟空字典不一樣.
? ? ? ? clear? 清空
? ?修改. set集合中數(shù)據(jù)沒有索引,沒有辦法直接刪除,先刪除再添加.
??
s1 = {1,2,3,5,6,7}
s2 = {3,4,5,6}
?求交集: print(s1&s2)? ?或者? ?print(s1.intersection(s2))
? 求并集: print(s1|s2)? ?或者? ?print(s1.union(s2))
? 求差集: 把自己本身中和對方不相關(guān)的內(nèi)容留下.
? ? ? ? ? ? ? ?print(s1-s2)? ?或者? print(s1.difference(s2))
? set集合本身是可以改變的,不可哈希的.我們也可以保存數(shù)據(jù),用frozenset.
? ? s = frozenset({1,4,3})
? ? print(s)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?frozen是可哈希的數(shù)據(jù)類型.
? ? for? el? in s:
? ? ? ? ?print(el)
? 5. 深淺拷貝 ,拷貝是復(fù)制一份.
? ? ? lst1 = [1,2,3,5,6,3]
? ? ? lst2 = lst1
? ? ?print(id(lst1),id(lst2))? ? ? 內(nèi)存地址是一樣的
? ?lst1 = [1,2,3,5,6,3]
? ? lst2 = lst1.copy()? 拷貝復(fù)制克隆
? ? print(id(lst1),id(lst2))
? ?拷貝復(fù)制出來的東西與原來的內(nèi)存地址不一樣,? lst2 = lst1[:]? 也是拷貝,復(fù)制.
? ?lis1 = [1,2,3,5,[3,4,5],3]
? ?lst = lis1[:]? 拿到的是第一層的復(fù)制品.
? ?print(id(lis1(4),id(lst(4))? ? ? ? ? lst = lis1.copy() 也是拿到第一層的復(fù)制品.
? ?拷貝是復(fù)制一份, 淺拷貝只會拷貝第一層內(nèi)容,第二層內(nèi)容不會拷貝.
? ? 深拷貝,? ?導(dǎo)入copy 模塊
? ? 例:? import? copy
? ? ? ? ? ?lst = [1,2,3,[3,4,5]]
? ? ? ? ? ?lst2 = copy.deepcopy(lst)? ? ? 深度拷貝
? ? ? ? ? ?print(id(lst(3)),id(lst2(3))
? ? 深拷貝是把所有的內(nèi)容都拷貝過來,都會復(fù)制一份.
?
轉(zhuǎn)載于:https://www.cnblogs.com/fengkun125/p/9152810.html
總結(jié)
以上是生活随笔為你收集整理的列表和字典循环遍历时的删除问题,集合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 7 中firewall-c
- 下一篇: 年底了,还这么忙