连接两个偏移列表(“偏移 zip”?)

owe*_*uob 5 python chess list python-3.x

考虑两个列表,例如:

L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
M = [1, 2, 3, 4, 5, 6, 7, 8]
Run Code Online (Sandbox Code Playgroud)

假设我们有一对必须匹配的元素 - 例如,(d, 6)。是否可以在这些元素处“对齐”列表,然后在两个列表中仍然存在元素的情况下连接列表 - 有点像 zip 和内部连接之间的交叉?

这可能最好通过例子来说明。使用LandM如上所述:

  • (d, 6)会导致[(a, 3), (b, 4), (c, 5), (d, 6), (e, 7), (f, 8)]
  • (h, 2)会导致[(g, 1), (h, 2)]
  • (a, 8)会导致[(a, 8)]

我的背景:我目前正在尝试构建一个能够通过阅读国际象棋符号来学习下棋的神经网络。此问题与检查棋盘上的对角线以更新棋子位置有关。例如,如果一个白色主教刚刚移动到 b7(距离棋盘右下角一格),那么它一定来自 h1-a8 长对角线上的一个格,或者来自 a6-c8 上的一个格短对角线。

所以在我的例子中,LM的长度相同,因为它们对应于 8×8 棋盘上的行列和文件。但总的来说,我认为列表的长度可能不同。

pad*_*dyg 0

你可以按照以下方式做一些事情

L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
M = [1, 2, 3, 4, 5, 6, 7, 8]
m = L.index('h')
n = M.index(2)
if m > n:
  m, n = (m - n), 0
else:
  m, n = 0, (n - m)
print(list(zip(L[m:], M[n:])))
Run Code Online (Sandbox Code Playgroud)

PS,您可能可以使 m, n 索引生成更紧凑,但更清楚这种结构应该发生什么。