fork download
  1. from itertools import chain, groupby
  2.  
  3. def group2_jfs(iterable, isstart):
  4. # ABNF Grammar:# iterable = [ body ] *( header [ body ] )
  5. it = groupby(iterable, isstart)
  6.  
  7. # [ body ]
  8. start, headers_or_body = next(it)
  9. if not start: # body
  10. yield headers_or_body
  11. start, headers = next(it)
  12. else: # 1*header
  13. headers = headers_or_body
  14.  
  15. while True: # 1*( header [ body ] )
  16. assert start
  17. bodyless_header = None
  18. for header in headers: # yield all but last header
  19. if bodyless_header is not None:
  20. yield iter([bodyless_header])
  21. bodyless_header = header
  22.  
  23. try:
  24. start, body = next(it)
  25. except StopIteration:
  26. yield iter([header]) # the last header is bodyless
  27. break
  28. else:
  29. assert not start
  30. assert header is not None
  31. yield chain([header], body)
  32. start, headers = next(it)
  33.  
  34. from collections import deque
  35.  
  36. deque(group2_jfs(range(10**7), lambda x: x % 1000 == 0), maxlen=0)
  37.  
Success #stdin #stdout 6.99s 5744KB
stdin
Standard input is empty
stdout
Standard output is empty