🍀 Python–遍历列表时删除元素的正确做法

  1. 上面的参考链接中提供了4种方法,我最喜欢第4种,借鉴之后,采用了 倒序 + del 的方式直接 就地更改原始数组 ,而不是拷贝副本给新的数组

    • 注意:倒序的第一个元素是 列表长度-1 ,第2.3个都是固定的 -1
  2. 然后喜欢的是 filter 方式,但是会产生一个 新的对象 ,需要 再用list 转为列表才能使用

  3. 最后喜欢的是 列表解析 方式,会产生一个新数组再赋值回去

注释部分是暂存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))
在Java我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢?
其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块。如下:
def createInstance(module_name, class_name, *args, **kwargs):
  module_meta = __import__(module_name, globals(), locals(), [class_name])
  class_meta = getattr(module_meta, class_name)
  obj = 
				
编译以后会生成 .class文件,也就是字节码文件:byte code java程序在编译(javac .java文件名 指令)后会产生字节码文件,也就是.class文件。 根据虚拟机所在系统的不同将字节码文件转变为不同的可执行文件,这也是java程序可跨平台的根据。
var test1 = [{"a":"1"},{"b":"3"}, {"c":"5"}]; console.log(test1.length+"---"+JSON.stringify(test1)); // 3---[{"a":"1"},{"b":"3"},{"c":"5"}] test1.splice(0, 1); // 从第0个元素开始,删除1个 console.log(test...
Python ,可以通过 `dir()` 函数获取某个模块或包的所有属性(包括类、函数、变量等)。因此,要获得一个库文件所有的类名,可以先导入该库,然后使用 `dir()` 函数。例如,假设我们要获取 `numpy` 库所有的类名,可以按照以下步骤进行: 1. 导入 `numpy` 库:`import numpy` 2. 使用 `dir()` 函数获取 `numpy` 所有的属性:`dir(numpy)` 3. 过滤出所有的类名:`[x for x in dir(numpy) if isinstance(getattr(numpy, x), type)]` 最终,第三步返回的就是 `numpy` 库所有的类名列表