一种可能性是使用 itertools.dropwhile (但这可能会限制为您所需解决方案的范围,因为尚不清楚,而且 itertools.dropwhile 不会像 itertools.cycle 那样无限循环遍历您的列表)。
您没有提供数据模型的很多细节。我假设 group.individuals 返回一个个人对象列表,并且 '.id' 属性代表每个人的 ID 号。例如,假设您在 group.individuals 列表中寻找个人 id 7:
from itertools import dropwhile
for item in dropwhile(lambda x: x.id != 7, group.individuals):
print item
这将遍历列表,直到找到 id=7(或更准确地说,直到 x.id != 7,因为 itertools.dropwhile 在第一次 False 测试之前不会返回任何内容),然后它将开始从列表。因此,如果该列表中的 id 类似于:[1, 19, 5, 6, 7, 2, 4, 5] 这将返回:7 2 4 5。
出于您的目的,听起来您会忽略第一个返回的响应,然后再使用响应。
另一种选择是遍历您的原始 group.individuals 列表以找到您想要的 id 的索引,然后只增加索引 - 如果您计算的索引超出您的列表,这也将允许您从 0 开始索引,对于例子:
def nextrecord(recordlist, value):
for i in range(len(recordlist)):
if recordlist[i].id == value:
newindex = i + 1
break
if newindex >= len(recordlist):
newindex = 0
return recordlist[newindex]
print nextrecord(group.individuals, 7)
但是,当然,这更加离散,并且不可迭代。可能有很多其他方法可以解决这个问题(包括使我的函数可迭代),但我还没有喝咖啡因!