Python中列表引用类实例并对比整数属性实现结果输出的方法
类实例列表属性比较操作的修正方案
通过列表存储类实例、遍历比较实例的整数属性、筛选符合条件的结果列表,完全是Python支持的常规开发操作,不存在语言层面不允许的限制,原代码无法正常运行是几处语法、逻辑疏漏导致的。
原代码存在的核心问题
- 缩进语法错误:
if obj.y > b:判断行的缩进与上下文不对齐,会直接触发IndentationError,导致程序无法启动 - 逻辑状态未重置:循环内的
comparison判断标记,没有在每次遍历新实例时重置为初始的True值,只要某次判断触发了comparison=False,后续遍历的所有实例都会沿用这个False状态,永远无法被筛选到结果列表中 - 内置名称覆盖:直接用
list作为自定义列表的变量名,会覆盖Python内置的list类型,后续如果需要调用列表的内置方法或类型转换逻辑,会出现隐蔽的运行错误 - 占位变量未赋值:创建类实例时传入的
m,x,y,z、比较阈值a,b,c都是无实际值的占位标注,运行时会触发NameError找不到变量
可直接运行的正确参考实现
# 定义类 class class1: def __init__(self, m, x, y, z): self.m = m self.x = x # 整数属性 self.y = y # 整数属性 self.z = z # 整数属性 # 初始化存储实例的列表(避免使用内置名list) instance_list = [] compare = [] # 追加实际有值的类实例 instance_list.append(class1(1, 10, 20, 30)) instance_list.append(class1(2, 15, 25, 35)) instance_list.append(class1(3, 5, 15, 25)) # 实际赋值的比较阈值 a = 12 b = 22 c = 32 for obj in instance_list: # 每个实例遍历前重置判断标记 comparison = True if obj.x > a: comparison = False if obj.y > b: comparison = False if obj.z > c: comparison = False if comparison: compare.append(obj.m) print(compare)
上述代码运行后,会按照“实例x属性不大于a、y属性不大于b、z属性不大于c”的规则筛选,最终输出符合要求的m属性值列表[1, 3],可直接复用为同类场景的实现参考。
内容的提问来源于stack exchange,提问作者Jason Lister
相关产品推荐
相关产品推荐

