Python實現(xiàn)列表索引批量刪除的5種方法
最近用Java做項目,使用到List broadcastInfos的 broadcastInfos.remove()方法,出現(xiàn)項目的重大失誤,因為第一次使用Java語言,過于相信remove()方法,所以,不加思索的就使用了來刪除list對象中的指定元素。
背景:
目標對象 listObj:[3, 4, 5, 6]
刪除指定索引列表 indexList: [1, 2]
返回結(jié)果: [3, 6]
常見錯誤:
for listElement in listObj: for index in indexList: if listElement == listObj[index]: listObj.remove(listElement)
返回結(jié)果

這種結(jié)果,既不會報錯,返回值也與目標極為相似,返回2個值list對象,len(listObj)-2 = 2,也是[3,… 開頭,如果不仔細看好像沒什么問題。但是結(jié)果卻是錯誤的。
將 listObj.remove() 改為listObj.pop(index)結(jié)果也是相同的。

Java用同樣的編程思想,得到的結(jié)果也有相似性。
這種錯誤,主要是初學(xué)者對于數(shù)據(jù)存儲原理沒有理解清楚,或者,沒有意識到內(nèi)存存儲長度的動態(tài)變化導(dǎo)致的, 下面介紹幾種Python刪除指定列表索引的方法
a = [3, 4, 5, 6]
b = [1,2] # b 中為 a的索引
# 刪除a中下標為b中的元素
# ====> [3, 6]
# 方法一
a = [a[i] for i in range(len(a)) if (i not in b)]
print(a) # 重新生成滿足條件的list并賦值給 a
# 方法二
[ a.remove(cElement) for cElement in [a[i] for i in b]]
print(a) # 強制使用 a.remove() 方法方式
# 方法三
a = {a[i] if i not in b else None for i in range(len(a))}
a.remove(None) # 將要刪除的對象設(shè)置為默認值,
# 前提是返回結(jié)果無序要求以及 純一種類型
print(a)
# 方法四
m = {i:element for i, element in enumerate(a)}
[m.pop(i) for i in b]
print(list(m.values())) # 將每一個元素對象編碼,然后按指定的索引刪除,
# 并返回 values() 集合對象 --> list對象
# 方法五
class ListSub:
def __init__(self, list1=None):
if list1 is None:
self.listA = []
elif len(list1):
self.listA = [x for x in list1]
def __sub__(self, rhs):
[self.listA.remove(cElement) for cElement in [self.listA[i] for i in rhs.listA]]
return self.listA
a = ListSub(a)
b = ListSub(b)
print(a-b) # 自己寫個類,既然Python 不支持 “-” 這個符號,
# 而喜歡存儲索引的同學(xué),自己寫個工具類,實現(xiàn)減法,
# 返回自己想要的結(jié)果對象。
當然,以上的方式都只是純粹將方法的實現(xiàn),沒有進行算法優(yōu)化,以及相應(yīng)的異常捕獲和處理,而Python的效率是有名的…, 所有大牛們請不要過多介懷。
方法其實還有很多,但就項目中出現(xiàn)的Java語法這種錯誤, 我就用Python 來反省一下自己,希望能幫到大家,謝謝。
最后,在學(xué)習其他語言的同時,才知道,Python有他語言的便捷之處,也有其他語言共有的缺憾,沒有語言基礎(chǔ)的使用者,坑尤其多(比如List類的使用),所以,還要廣學(xué)習,多對比,寫出集多種語言精華的代碼,然更多初學(xué)者將精力放在業(yè)務(wù)處理和程序的實現(xiàn)上。
到此這篇關(guān)于Python實現(xiàn)列表索引批量刪除的5種方法的文章就介紹到這了,更多相關(guān)Python 列表索引批量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python使用requirements.txt和pip打包批量安裝的實現(xiàn)
本文主要介紹了Python使用requirements.txt和pip打包批量安裝的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2023-02-02
python實現(xiàn)的接收郵件功能示例【基于網(wǎng)易POP3服務(wù)器】
這篇文章主要介紹了python實現(xiàn)的接收郵件功能,結(jié)合實例形式分析了Python基于網(wǎng)易POP3服務(wù)器接收郵件相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
Python調(diào)用PC攝像頭實現(xiàn)掃描二維碼
PC攝像機掃描二維碼的應(yīng)用場景很廣泛,可以應(yīng)用于各種需要快速掃描、識別和管理的場景,本文就來具體講講如何用Python實現(xiàn)這一功能吧2023-05-05
Python的反射函數(shù)與內(nèi)省工具深入解析
這篇文章主要為大家介紹了Python的反射函數(shù)與內(nèi)省工具深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-06-06

