Java集合04 9.Set介面方法 Set介面基本介紹 無序(添加和取出的順序不一致),沒有索引 不允許重覆元素,所以最多只有一個null JDK API中介面的實現類有: Set介面的常用方法:和List介面一樣,Set介面也是Collection的子介面,因此,常用方法和Collection接 ...
今天由於要對一個 list 數據類型寫一個迴圈刪除的程式(這是小編第一次對於 list 操作),但發現一個奇異問題,來,我們來看看代碼跟效果:
# 初始化一個 list 列表,為了下邊的方便比較,我就使用跟 list 索引來做 list 的元素
datas = [0,1,2,3,4]
# 列印元素組,方便比較
print(datas)
#使用 for 遍歷
for data in datas:
# 刪除 list 中的元素
datas.remove(data)
# 列印刪除後的數組
print(datas)
我們來看這一段代碼,最後的輸出結果,按照我以前的經驗,應該是一個空的 [] ,但結果不是:
上面的結果卻告訴我們,上面的程式只刪除了三個元素,並沒有全部刪除完,為什麼呢?從上面的結果中,我們可以看出,刪除的元素是 1,3,5,從這我們可以看出,原來,是 list 在 for 迴圈中的索引問題,我們來實時跟蹤一下 list 列表在 for 中的變化:
# 初始化一個 list 列表,為了下邊的方便比較,我就使用跟 list 索引來做 list 的元素
datas = [0,1,2,3,4]
# 列印元素組,方便比較
print(datas)
# 記錄是第幾次 for 迴圈
index = 1
# 記錄 datas 當前迴圈的下標值
i = 0
#使用 for 遍歷
for data in datas:
# 列印迴圈次數
print('\n這是第 %d 次迴圈,datas 當前在 for 迴圈中的下標值為:%d,刪除前 datas 的元素為:' %(index, i))
# 實時列印 datas 列表
print(datas)
# 刪除 list 中的元素
datas.remove(data)
# 迴圈次數+1
index += 1
# 索引 +1
i += 1
# 最後的 datas 列表
print('\n迴圈結束,最後的 datas 的元素為:')
print(datas)
輸出結果如下:
如上圖可以看出,在 for 迴圈中 datas 沒刪除一個元素,它的索引都會變化,但 for 迴圈中遍歷的索引,總會加 1 ,所以,就會出現以上這種跳過性刪除的情況。對於這種情況,小編自己想到了一個方法,我們先來看看下麵的這一段程式:
# 初始化一個 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]
#使用 for 遍歷
for data in datas:
# 現在我們需要刪除偶數的元素
if data % 2 == 0:
# 刪除 datas 中的元素
datas.remove(data)
# 最後的 datas 列表
print('\n迴圈結束,最後的 datas 的元素為:')
print(datas)
我們來看看這段代碼的運行結果:
我們可以看出,4 跟 10 是相鄰著的,4 的下標是 2,10 的下標是 3,所以當 4 刪除之後,datas 中下標為 2 的元素就變成了 10,但是,此時的 for 迴圈中,datas 的下標是 3 了,所以取不了 10 這個元素,這才導致了 10 沒有被刪除。那我們要如何來刪除呢?小編的做法是這樣的:
'''
學習中遇到問題沒人解答?小編創建了一個Python學習交流群:711312441
尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書!
'''
# 初始化一個 list 列表
datas = [1,3,4,10,5,3,7,6,9,8]
# 列印原數組元素,方便對比
print('原 datas 列表的元素為:')
print(datas)
# 定義一個空的 list 列表,來儲存要刪除的 datas 的元素
datas_del = []
#使用 for 遍歷
for data in datas:
# 現在我們需要刪除偶數的元素
if data % 2 == 0:
# 不直接刪除,將需要刪除的元素,存入 datas_del 中
datas_del.append(data)
# 列印 datas_del 列表,查看要刪除的元素
print('\n列印 datas_del 列表,查看要刪除的元素')
print(datas_del)
# 再執行一個 for 迴圈,遍歷 datas_del 列表
for data in datas_del:
# 刪除 datas 中的元素
datas.remove(data)
# 最後的 datas 列表
print('\n刪除後的 datas 的元素為:')
print(datas)
現在我們來執行以下上面的這段代碼,是否已經可以成功的刪除所要刪除的元素,我們看看結果:
從上面的結果可知,我們已經成功的將我們所需要的元素刪除了,這就是小編自己想到的方法。