我想“从两端”(到(该部分的)中间,此处)迭代Python序列(的一部分)。
在 C/C++/Java 中,我可能会尝试
int start = 2, beyond = 7;
for (int forward = start, back = beyond ; forward <= --back ; forward++)
printf("%d %d\n", forward, back);
我似乎无法决定我最不喜欢以下哪种变体:
seq = tuple(chr(c) for c in range(ord('a'), ord('z')+1))
start, beyond = 2, 7
print("subtract")
for forward in range(start, beyond):
back = start + beyond - 1 - forward
if (back < forward):
break
print(seq[forward], seq[back])
# if (back <= forward): XXX ERROR, as YvesgereY pointed out
# break
print("reversed")
for forward, back in zip(range(start, beyond),
reversed(range(start, beyond))):
if (back < forward):
break
print(seq[forward], seq[back])
print("step -1")
for forward, back in zip(range(start, beyond), range(beyond-1, start-1, -1)):
if (back < forward):
break
print(seq[forward], seq[back])
print("naked code")
forward, back = start, beyond-1 # thanks again, YvesgereY
while (forward <= back):
print(seq[forward], seq[back])
forward += 1
back -= 1
有没有一种令人愉快/理智/惯用的方法来处理这个问题?