列表
問題
有列表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元素的鍵值對刪除。那麼拿到這個題,有人說我一個一個刪除,這是不行的,因為這個字典只是舉個例子,裡面的元素不確定,所以你要怎麼樣?你要遍歷所有的鍵,符合的刪除,對吧? 嗯,終於上套了,哦不,上道了,請開始你的表演。
解決方案
建立一個空列表,用於儲存關鍵字。
- 遍歷整個字典的鍵,如果鍵符合條件即加入列表
- 遍歷列表,逐個刪除列表對應字典的值
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)
複製程式碼