我循环浏览文件,我想检查下一个对象是否等于当前对象。这两个对象都有一个属性名称,如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
我是一名学习编程的生物学家。我希望我能得到足够的鼓励。
答案 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