繁体   English   中英

检查下一个值是否等于python循环中的当前值?

[英]Check if next value is equal o current value in python loop?

我正在遍历文件,我想检查下一个即将到来的对象是否等于当前对象。 这两个对象的属性名称都类似Obj.name

这是一些简化的示例:

该文件包含:

Oba_A
Obj_B
Obj_C
Obj_D

我像这样遍历它们:

for obj in open("file.txt"):
    check if Obj_A.name==Obj_B.name, if not:
        if Obj_B.name==Obj_C.name

我是一名学习编程的生物学家。 希望我在这里得到足够的鼓励。

忽略了如何从文本文件获取对象的问题,您的基本答案可能类似于以下内容:

last_value = None
for obj in collection:
    if obj.name == last_value:
        # do something
    else:
        # do something different
    last_value = obj.name

更新 :如果你想采取行动基于与下一个对象匹配的第一个对象,你可以存储到以前的对象,而不是仅仅的名字,前一个参考:

prev_obj = None
for obj in collection:
    if obj.name == prev_obj.name:
        # do something with prev_obj
    else:
        # do something different
    prev_obj = obj

或者,如果确实有助于将它们视为“当前”和“下一个”:

cur_obj = None
for next_obj in collection:
    if next_obj.name == cur_obj.name:
        # do something with cur_obj
    else:
        # do something different
    cur_obj = next_obj

但是请注意,我所做的只是更改了命名。 步骤仍然相同。

附加更新:循环中的第一次,prev_obj为None,因此它没有name属性。 将其更新为:

prev_obj = None
for obj in collection:
    if prev_obj is not None and obj.name == prev_obj.name:
        # do something with prev_obj
    else:
        # do something different
    prev_obj = obj

跟踪我们看到的最后一个对象并与当前对象进行比较:

objects = ([....])
prev = objects[0]
for obj in objects[1:]:
   if prev.name == obj.name:
       # do whatever
   else:
       # do something else
   prev = obj # update prev to current obj

如果对象是某种迭代器或确实是文件对象,请使用prev = next(objects)启动,然后循环遍历其余对象。

附带说明一下,使用with可以打开文件,因为它会自动关闭文件:

with open("file.txt") as f:
   prev = next(f)
   for obj in f:
       # create objects
       if prev.name == obj.name:
            # do whatever
      else:
           # do something else
      prev = obj

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM