参考链接
-
上面的参考链接中提供了4种方法,我最喜欢第4种,借鉴之后,采用了
倒序 + del
的方式直接就地更改原始数组,而不是拷贝副本给新的数组- 注意:倒序的第一个元素是
列表长度-1
,第2.3个都是固定的-1
- 注意:倒序的第一个元素是
-
然后喜欢的是
filter
方式,但是会产生一个新的对象,需要再用list
转为列表才能使用 -
最后喜欢的是
列表解析
方式,会产生一个新数组再赋值回去
实验结果
代码
注释部分是暂存json文件删除类名的实验记录,有兴趣的同学可移步至:【数据集处理】获取json文件夹所有类名、更改某些类名、删除某些类名
# 列表删除完所有指定元素
if __name__ == '__main__':
n = 1
print(f'待删除的元素是:{n}')
print('\n# -----第1种:倒序 + del 就地删除指定clslist中的元素----- #')
arr = [{'a': 2, 'b': 3}, 1, 1, 3, 7, 3]
print(f'arr = {arr}')
for i in range(len(arr) - 1, -1, -1): # 倒序
if arr[i] == n:
del arr[i]
print(f'arr = {arr}')
print('\n# -----第2种:过滤器 filter,需要赋值给一个新的数组----- #')
arr = [{'a': 2, 'b': 3}, 1, 1, 3, 7, 3]
print(f'arr = {arr}')
b = filter(lambda e: e != n, arr)
print(f'arr = {list(b)}')
print('\n# -----第3种:列表解析,需要赋值给一个新的数组----- #')
arr = [{'a': 2, 'b': 3}, 1, 1, 3, 7, 3]
print(f'arr = {arr}')
arr = [x for x in arr if x != n]
print(f'arr = {arr}')
# # -------------以下是我在json文件中删除类名做的实验,在此做个记录------------ #
# dictlist = [{'label': 'aaa', 'point': 3, 'x': 0}, {'label': 'bbb', 'point': 3, 'x': 0},
# {'label': 'aaa', 'point': 3, 'x': 0}, {'label': 'aaa', 'point': 3, 'x': 0},
# {'label': 'ccc', 'point': 3, 'x': 0}]
# print(dictlist)
#
# clslist = ['aaa', 'bbb']
# print(f'\n待删除的元素数组是:{clslist}')
#
# print('\n# -----第1种:倒序 + del 删除指定clslist中的元素----- #')
# for i in range(len(dictlist) - 1, -1, -1): # 倒序
# if dictlist[i]['label'] in clslist:
# del dictlist[i]
# print(dictlist)
#
# print('\n# -----第2种:过滤器 filter 删除指定clslist中的元素----- #')
# b = filter(lambda dict_e: dict_e['label'] not in clslist, dictlist)
# print(list(b))