日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

列表和字典循环遍历时的删除问题,集合

發(fā)布時間:2023/12/18 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 列表和字典循环遍历时的删除问题,集合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。