一種可能性是使用itertools.dropwhile(但是這可能被限制了您所需的解決方案的範圍,因爲它是不明確的,也itertools.dropwhile通過您的列表喜歡itertools不會無限循環.cycle)。
您沒有提供很多數據模型的詳細信息。我會假設group.individuals返回個人對象列表,'.id'屬性代表每個人的id號。例如,假設你找個人ID 7,group.individuals的列表中:
from itertools import dropwhile
for item in dropwhile(lambda x: x.id != 7, group.individuals):
print item
這將通過列表,直到它找到ID = 7(或更多acurately,直到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)
但是,當然,這是更離散,不可迭代。有可能有很多其他方法來處理這個問題(包括使我的函數可迭代),但我還沒有我的咖啡因呢!
在迭代器的意義上,你不是指'next()',是嗎? – letitbee 2011-05-10 19:34:42
你沒有很清楚地說明問題。什麼是相應的sql,就像'select individual.id from individual join groups on(individual.group_id = group.id)where individual.id> groups.last_individual_id order by individual.id limit 1'? – letitbee 2011-05-10 19:41:15