add symmetric iteration routine, related to #5

This commit is contained in:
Florian Förster 2026-03-23 11:21:53 +01:00
parent 24c06479b6
commit 49d68cefa5
2 changed files with 44 additions and 0 deletions

View File

@ -0,0 +1,19 @@
from __future__ import annotations
from collections import deque
from collections.abc import Iterator, Sequence
from typing import TypeVar
T = TypeVar("T")
def symmetric_iter(
x: Sequence[T],
) -> Iterator[T]:
d = deque(x)
for idx in range(len(d)):
if idx % 2 == 0:
yield d.popleft()
else:
yield d.pop()

25
tests/test_iteration.py Normal file
View File

@ -0,0 +1,25 @@
from dopt_basics import iteration
def test_symmetric_iter_1():
l1_in = [1, 2, 3, 4, 5, 6]
l1_out = [1, 6, 2, 5, 3, 4]
l1_calc = list(iteration.symmetric_iter(l1_in))
assert len(l1_in) == len(l1_calc)
assert len(l1_out) == len(l1_calc)
for truth, calc in zip(l1_out, l1_calc):
assert truth == calc
def test_symmetric_iter_2():
l1_in = [1, 2, 3, 4, 5]
l1_out = [1, 5, 2, 4, 3]
l1_calc = list(iteration.symmetric_iter(l1_in))
assert len(l1_in) == len(l1_calc)
assert len(l1_out) == len(l1_calc)
for truth, calc in zip(l1_out, l1_calc):
assert truth == calc