每行之后有更多的pythonic方式遍历两个列表切换方向吗?

数学冷却器

我正在编写一些以一种奇怪的方式循环通过两个列表的代码。我的目标是a使用index遍历整个list i,然后b使用index循环j并来回交替。即我想按顺序遍历配对:

(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-1)(i-1, j)(i-1, j-1)打之前(i, j)满足此要求的任何可能的迭代路径都将起作用。如果您有兴趣,这是因为我正在尝试实现DTW算法,其中矩阵中分配的每个值都取决于先前的相邻值。

圆珠笔

如果将数字排列在按n列的m列网格中,则可以通过在第一列中向下移动,然后跨过第一行(从第一列开始),然后在第二列向下(从行开始)来获得解决方案1),然后跨第二行(从第2列开始),然后跨到第三列(从第2行开始),依此类推。这只是实现了这一点。

def gen_tuples(n_rows, n_cols):
    row = col = 0
    while row <= n_rows and col <= n_cols:
        for i in range(row, n_rows + 1):
            yield (i, col)

        for j in range(col + 1, n_cols + 1):
            yield (row, j)

        row += 1
        col += 1


list(gen_tuples(5, 3))

[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (5, 0),
 (0, 1), (0, 2), (0, 3),
 (1, 1), (2, 1), (3, 1), (4, 1), (5, 1),
 (1, 2), (1, 3),
 (2, 2), (3, 2), (4, 2), (5, 2),
 (2, 3),
 (3, 3), (4, 3), (5, 3)]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

切换两个功能

来自分类Dev

是否有在两个打开的选项卡之间来回切换的快捷方式?

来自分类Dev

切换R中的语句,以基于列值将每行替换为两个新行

来自分类Dev

一次单击即可在两个用户之间切换吗?

来自分类Dev

我可以单击一下在两个用户之间切换吗?

来自分类Dev

在Angular JS的两个选择下拉列表之间切换

来自分类Dev

在Angular JS的两个选择下拉列表之间切换

来自分类Dev

jQuery使用带有两个元素的切换类

来自分类Dev

切换带有两个变量的大小写

来自分类Dev

jQuery使用带有两个元素的切换类

来自分类Dev

切换具有两个不同事件的元素

来自分类Dev

循环遍历并在两个表达式之间切换,唯一的不同是符号

来自分类Dev

循环遍历并在两个表达式之间切换,唯一的不同是符号

来自分类Dev

XNA动画切换两个精灵的位置

来自分类Dev

一键切换两个div

来自分类Dev

ContentControl在两个按钮之间切换

来自分类Dev

在两个情节提要之间切换

来自分类Dev

在两个片段之间切换的最佳方法

来自分类Dev

jQuery在两个函数之间切换

来自分类Dev

如何切换两个Java JPanel的内容

来自分类Dev

一键切换两个容器

来自分类Dev

一键切换两个图像

来自分类Dev

在两个循环之间切换

来自分类Dev

在两个或多个功能之间切换

来自分类Dev

在rShiny中的两个renderDT之间切换

来自分类Dev

两个功能之间的角度(点击)切换

来自分类Dev

jQuery自动切换两个功能

来自分类Dev

切换两个标签文本的操作

来自分类Dev

在两个功能之间切换