【发布时间】:2020-05-14 21:41:37
【问题描述】:
我正在编写一些代码,它以一种奇怪的方式遍历两个列表。我的目标是使用索引i 遍历所有列表a,然后使用索引j 循环遍历b 并来回交替。 IE。我想按顺序遍历对:
(0,0),...,(n,0),(0,1)...(0,m),(1,1)...,(n,1),(1,2)...,(1,m),(2,2),...,(n,m)
我现在的代码是这样写的:
while i+j < len(a) + len(b) -2:
#do stuff
if direction_toggle:
if i + 1 > len(a):
direction_toggle = not direction_toggle
i = j
else:
i += 1
else:
if j + 1 > len(b):
direction_toggle = not direction_toggle
j = i + 1
else:
j += 1
但是,我想更pythonic,并遵循
的格言平面比嵌套好。
我想写一些看起来更像这样的东西:
while i+j < len(a) + len(b) -2:
#do stuff
if direction_toggle:
var, length = i, len(a)
else:
var, length = j, len(b)
if var + 1 > length:
direction_toggle = not direction_toggle
else:
var += 1
所以我的问题是:有没有一种方法可以实现相同的目标但减少重复性,并去除一层嵌套?总的来说,我的代码非常简单,但似乎无法避免以两种不同的方式重复自己,是我遗漏了什么,还是我的实现实际上是实现这一目标的最糟糕的方式?
PS 我希望这不是重复的,我找不到任何其他问题解决 这个主题。
为澄清而编辑:我的具体要求是在点击(i, j) 之前处理(i, j-1)、(i-1, j) 和(i-1, j-1)。满足此要求的任何可能的迭代路径都将起作用。如果您有兴趣,这是因为我正在尝试实现 DTW 算法,其中矩阵中分配的每个值都取决于先前的相邻值。
【问题讨论】:
标签: python iteration nested-lists