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

时间:2015-02-01 00:50:56

标签: python python-2.7 loops

我循环浏览文件,我想检查下一个对象是否等于当前对象。这两个对象都有一个属性名称,如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

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

2 个答案:

答案 0 :(得分:3)

忽略了如何从文本文件中获取对象的问题,您的基本答案可能如下所示:

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

<强>更新: 如果你想根据与下一个对象的匹配对第一个对象 act ,你可以存储对前一个对象的引用,而不仅仅是名称,例如:

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

或者,如果真的有助于将这些视为&#34;当前&#34;和&#34; next&#34;:

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

答案 1 :(得分:2)

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

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