Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 连接两个偏移列表(“偏移压缩”?)_Python_List_Python 3.x_Chess - Fatal编程技术网

Python 连接两个偏移列表(“偏移压缩”?)

Python 连接两个偏移列表(“偏移压缩”?),python,list,python-3.x,chess,Python,List,Python 3.x,Chess,考虑两个列表,例如: L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'] M = [1, 2, 3, 4, 5, 6, 7, 8] 假设我们得到一对必须匹配的元素,例如,(d,6)。是否可以在这些元素处“对齐”列表,然后在两个列表中仍有元素的位置连接列表?有点像zip和内部连接之间的交叉 这可能是最好的例子说明。如上所述使用L和M: (d,6)将导致[(a,3)、(b,4)、(c,5)、(d,6)、(e,7)、(f,8)] (h,2)将导致[(g,1),

考虑两个列表,例如:

L = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
M = [1, 2, 3, 4, 5, 6, 7, 8]
假设我们得到一对必须匹配的元素,例如,
(d,6)
。是否可以在这些元素处“对齐”列表,然后在两个列表中仍有元素的位置连接列表?有点像zip和内部连接之间的交叉

这可能是最好的例子说明。如上所述使用
L
M

  • (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短对角线上的正方形


所以在我的例子中,
L
M
是相同的长度,因为它们对应于8乘8的棋盘上的等级和文件。但总的来说,我认为列表可能有不同的长度。

这里有一种方法,它首先对两个列表使用正向顺序,然后反向从两个列表中的联接项前后提取项

然后,将两个生成的iterables链接起来,但不是在使用以下方法从其中一个iterables中删除连接点之后:


对两个列表进行两次传递可能不是很有效,但惰性评估可能会处理大列表。

您可以按照

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:])))

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

这非常清楚地说明了正在发生什么-谢谢!在我的两个短列表中,这可能有点夸张,但我非常欣赏您的答案的潜在可扩展性,如果我将来使用更大的列表,我将再次参考它-非常感谢!
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:])))