今天由于要對一個 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)
現在我們來執行以下上面的這段代碼,是否已經可以成功的洗掉所要洗掉的元素,我們看看結果:

從上面的結果可知,我們已經成功的將我們所需要的元素洗掉了,這就是小編自己想到的方法,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/501899.html
標籤:其他
上一篇:集合(set)
