Python For循环赋值:两种常见写法对比与解析
本文探讨Python中从对象列表提取属性值的两种常见写法。通过对比普通For循环与列表推导式,分析两者在时间复杂度O(n)上的一致性,并指出在需要额外判断逻辑时普通循环的适用性,帮助开发者根据场景选择更合适的代码实现方式。
背景
随着代码量的增加,功能需求往往也随之增多,这容易导致代码中冗余部分堆积。
面对这种情况,许多开发者会感到困扰,寻求更高效的解决方案成为必要。
通常,高级的编码实践倾向于使用更简洁的代码表达。
此外,将重复逻辑封装为函数,通过直接调用函数来复用代码,是常见的优化手段。
For循环赋值
假设已定义一个road类,包含若干属性。首先初始化road对象并赋值,随后将这些对象存入roadObjList集合中。
目标是遍历roadObjList集合,提取每个road对象的objectid值,并将结果存入一个新的列表中。
class road():
def __init__(self,gid,objectid,name,width,direction,speed,type,snode,enode,length,startX,startY,endX,endY):
self.gid= gid
self.objectid = objectid
self.name = name
self.width = width
self.direction = direction
self.speed = speed
self.type = type
self.snode = snode
self.enode = enode
self.length = length
self.startX = startX
self.startY = startY
self.endX = endX
self.endY = endY
写法一:
objList = []
for r in roadObjList:
objList.append(r.objectid)
写法二:
objList = [r.objectid for r in roadObjList]
补充说明
关于For循环遍历的实现方式还有多种,尽管部分写法看似基础,但实际效果相近。
写法一:
for i,ele in enumerate(roadPointObjList):
print(i)
print(ele)
写法二:
for i in range(0, len(roadPointObjList)):
print(i)
print(roadPointObjList[i])
总结
从时间复杂度来看,两种写法均为O(n),因为都需要遍历整个For循环。
第二种写法更为简洁,一步到位;但如果需要在循环内部进行条件判断,则第一种写法更为合适。
以上为个人经验分享,旨在提供参考,欢迎支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













