【发布时间】:2020-03-13 10:15:40
【问题描述】:
我有一个清单
l = [object0, object1, object2, object3, object4....object499]
最大长度永远不会超过 500
所有对象都有属性x、y、z、a
如果在 object.x 中重复,我必须修改 object.y:
if object9.x == object10.x:
object9.y = object9.z * object9.a/1000
object10.y = object10.y - object9.z * object9.a/1000
保证重复将在连续的对象中。
可能有两个以上的重复,例如
object12.x == object13.x == object14.x
因此修改将根据修改后的第二个副本的值以与第三个副本相同的方式进行。
我已经编写了一个循环来执行此操作,但正在考虑是否有任何 pythonic/更快的方式来执行此操作。 我正在使用python3.7
编辑:
tag = None
for i, o in enumerate(l):
if tag is None:
x_a = o.x
elif x_a == o.x #duplicate found
temp = o.y
c_over = 0
c_value = o[i-1].z * o[i-1].a/1000
if c_value < o[i-1].y:
o[i-1].y = c_value
c_over = temp - c_value #carry over value
o[i] = c_over # either zero of carry over value
x_a = o.x
【问题讨论】:
-
您能否展示您现有的循环,以便其他人可以建议如何改进它,或者建议其他方法?
-
你想要
itertools.groupby,将operator.attrgetter('x')作为key函数。 -
您可以使用
for (prev, current) in zip(l, l[1:]):迭代列表中的情侣 -
现在枚举列表,如果发现重复,则修改前一个元素。贴出循环的代码
标签: python python-3.x python-3.7