本文主要介绍了Python实现列表索引批量删掉的5种方式,
文中通过示例代码介绍的十分详尽,对你们的学习或则工作具有一定的参考学习价值,须要的同事们下边随着小编来一起学习学习吧
近来用Java做项目red hat linux,使用到ListbroadcastInfos的broadcastInfos.remove()方式,出现项目的重大失误,由于第一次使用Java语言,过分相信remove()方式,所以,不加思考的就使用了来删掉list对象中的指定元素。
背景:
目标对象listObj:[3,4,5,6]
删掉指定索引列表indexList:[1,2]
返回结果:[3,6]
常见错误:
1
2
3
4
forlistElementinlistObj:
forindexinindexList:
iflistElement==listObj[index]:
listObj.remove(listElement)
返回结果
这些结果,既不会报错,返回值也与目标极为相像,返回2个值list对象,len(listObj)-2=2,也是[3,…开头,假若不仔细看似乎没哪些问题。并且结果却是错误的。
将listObj.remove()改为listObj.pop(index)结果也是相同的。
Java用同样的编程思想,得到的结果也有相像性。
这些错误,主要是初学者对于数据储存原理没有理解清楚,或则linux 批量删除文件嵌入式linux驱动程序设计从入门到精通,没有意识到显存储存宽度的动态变化造成的,下边介绍几种Python删掉指定列表索引的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
a=[3,4,5,6]
b=[1,2]#b中为a的索引
#删掉a中下标为b中的元素
#====>[3,6]
#方式一
a=[a[i]foriinrange(len(a))if(inotinb)]
print(a)#重新生成满足条件的list并形参给a
#方式二
[a.remove(cElement)forcElementin[a[i]foriinb]]
print(a)#强制使用a.remove()方式方法
#方式三
a={a[i]ifinotinbelseNoneforiinrange(len(a))}
a.remove(None)#即将删掉的对象设置为默认值,
#前提是返回结果无序要求以及纯一种类型
print(a)
#方式四
m={i:elementfori,elementinenumerate(a)}
[m.pop(i)foriinb]
print(list(m.values()))#将每一个元素对象编码,之后按指定的索引删掉,
#并返回values()集合对象-->list对象
#方式五
classListSub:
def__init__(self,list1=None):
iflist1isNone:
self.listA=[]
eliflen(list1):
self.listA=[xforxinlist1]
def__sub__(self,rhs):
[self.listA.remove(cElement)forcElementin[self.listA[i]foriinrhs.listA]]
returnself.listA
a=ListSub(a)
b=ListSub(b)
print(a-b)#自己写个类,既然Python不支持“-”这个符号,
#而喜欢储存索引的朋友,自己写个工具类,实现加法,
#返回自己想要的结果对象。
其实,以上的方法都只是纯粹将方式的实现,没有进行算法优化,以及相应的异常捕获和处理,而Python的效率是有名的…,所有大牛们请不要过多怨愤。
方式虽然还有好多,但就项目中出现的Java句型这些错误,我就用Python来反思一下自己,希望能帮到你们,感谢。
最后linux 批量删除文件,在学习其他语言的同时,才晓得,Python有他语言的方便之处,也有其他语言共有的缺憾,没有语言基础的使用者,坑尤其多(例如List类的使用),所以,还要广学习,多对比,写出集多种语言精华的代码,然更多初学者将精力放到业务处理和程序的实现上。
到此这篇关于Python实现列表索引批量删掉的5种方式的文章就介绍到这了。