列表與字典中的坑

零度冷咖啡發表於2019-10-23

列表

問題

有列表l1, l1 = [11, 22, 33, 44, 55],請把索引為奇數對應的元素刪除(不能一個一個刪除,此l1只是舉個例子,裡面的元素不定)。

解決方案

首先排除一種常見的寫法:一個一個的順序刪。 為什麼排除?因為當你刪除了一個元素後,後邊的元素也就變換了位置。例如刪除了第二項列表變成了[11,33,44,55],下一次刪除就變成了55。所以這是不對的。

這裡有三種解決方案。

直接刪除法

python中利用列表切片可以直接刪除 list[開始位置:結束位置:部長] 其中位置指的是索引。

def del1():
    del list1[1::2]
    print(list1)
複製程式碼

倒敘刪除法

倒敘刪除 從後向前刪除元素

4%2=0

3%2=1 刪除下邊為3的元素

2%2=0

1%2=1 刪除下邊為1的元素

0%2=0 從後向前刪除,刪除3(下標)後不影響3(下標)之前的元素位置。

def del2():
    for i in range(len(list2)-1,-1,-1):
        if i % 2 == 1:
            list2.pop(i)
    print(list2)
複製程式碼

換一種思維

在生成一個臨時列表,用於儲存滿足條件的下標元素

def del3():
    temp = []
    for i in range(0,len(list3),2):
        temp.append(list3[i])
    print(temp)
複製程式碼

字典

問題

dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18} 請將字典中所有鍵帶k元素的鍵值對刪除。那麼拿到這個題,有人說我一個一個刪除,這是不行的,因為這個字典只是舉個例子,裡面的元素不確定,所以你要怎麼樣?你要遍歷所有的鍵,符合的刪除,對吧? 嗯,終於上套了,哦不,上道了,請開始你的表演。

解決方案

建立一個空列表,用於儲存關鍵字。

  1. 遍歷整個字典的鍵,如果鍵符合條件即加入列表
  2. 遍歷列表,逐個刪除列表對應字典的值
dic = {'k1':'太白','k2':'barry','k3': '白白', 'age': 18}
def del1():
    l1 = []
    for key in dic:
        if 'k' in key:
            l1.append(key)
    for i in l1:
        dic.pop(i)
    print(dic)
複製程式碼

其中取關鍵字時,可以使用dic類的內建方法,keys()。keys()方法返回的是一個dict_keys型別的物件,需要將其強制轉換成list型別。即可正常操作。

for i in list(dic.keys()):
    if 'k' in i:
        dic.pop(i)
print(dic)
複製程式碼

相關文章