하나의 가능성은 itertools.dropwhile을 사용하고 있습니다 (그러나 이것은 분명히 아니므로, 원하는 솔루션의 범위로 제한 될 수 있습니다, 또한 itertools.dropwhile는 itertools처럼 목록을하지 무한주기를 수행 .cycle 않습니다).
데이터 모델에 대한 세부 정보를 많이 제공하지 않았습니다. 나는 그 그룹을 추정 할 것이다. 개인은 개인 개체의 목록을 반환하고 '.id'속성은 각 개인의 ID 번호를 나타낸다. ! ID = 7 (또는 그 이상 acurately, x.id까지 = 7이 찾을 때까지
from itertools import dropwhile
for item in dropwhile(lambda x: x.id != 7, group.individuals):
print item
이 목록을 통해 이동합니다 : 예를 들어,이 group.individuals의 목록 내에서 개별 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
당신은 문제를 아주 명확하게 진술하지 않았습니다. 해당 SQL은 무엇입니까? 'individual.id> group.id (individual.id> groups.id)에서 groups.last_individual_id order by individual.id limit 1'에있는 개인의 select individual.id와 같은 것일 수 있습니까? – letitbee