🍀
Python–遍历列表时删除元素的正确做法
-
上面的参考链接中提供了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}')
在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` 库中所有的类名列表。