如何在python中跨越2个二维数组?

如何在python中跨越2个二维数组?,python,list,Python,List,我正在尝试制作一个程序,它将获取两个代表网格的文件,并使它们重叠(纵横字谜) 让我更清楚地解释一下: 对于网格中的每个单元格,我试图找到一个字符,该字符位于水平文件的行和垂直文件的列上 文件“horizontal.txt”: 文件“vertical.txt”: 程序输出: abc def ghi 对于单元格[0][0](左上角),水平文件第0行和垂直文件第0列上的字母均为“a” 所以基本上,行和列中的单词都是字谜,我想找到一种方法,从前两个开始构造最终的表 我已经在python中尝试了这个方法

我正在尝试制作一个程序,它将获取两个代表网格的文件,并使它们重叠(纵横字谜)

让我更清楚地解释一下:

对于网格中的每个单元格,我试图找到一个字符,该字符位于水平文件的行和垂直文件的列上

文件“horizontal.txt”:

文件“vertical.txt”:

程序输出:

abc
def
ghi
对于单元格[0][0](左上角),水平文件第0行和垂直文件第0列上的字母均为“a”

所以基本上,行和列中的单词都是字谜,我想找到一种方法,从前两个开始构造最终的表

我已经在python中尝试了这个方法来查找常见字母(我的网格是12x12):

以下是前4个单元格的流程的图形表示:

我试图找到一个字符,它既在水平文件的行上,也在垂直文件的列上

除了in-and-output(我将不详细介绍)之外,您需要的是每个可能的行/列对中的字符集的简单求交算法。幸运的是Python(它们通过重载的
&
操作符支持交集):

这将计算可能出现在输出中相应位置的字符集(通常,可能有多个候选字符):

如果您预先知道不存在歧义(例如,如果所有字符都是不同的)并且网格是可解的,则可以使用以下函数:

res = [ [ next(iter(set(r) & set(c))) for c in cols ] for r in rows ]
输出:

[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]

那么问题是什么呢?我完全不理解你的描述。问题是我的公共数组没有被填充,我开始认为有一种非常简单的方法可以做到这一点,我只是一个算法n00b@ooga:对于我网格中的每个单元格,我试图找到一个既在水平文件的行上又在垂直文件的列上的字符在原始示例中,为什么
[0][0]
是“a”而不是“d”?它们都符合要求?这正是我想要的,而且非常非常漂亮。非常感谢你!(在我的12x12网格中存在一些模糊性)
#!/usr/bin/env python

import re

def printCrossword(c):
    for r in range(12):
        print ''.join(c[r])

with open('h.txt') as hFile:
    hFileData = hFile.readlines()

with open('v.txt') as vFile:
    vFileData = vFile.readlines()

hData = [[0 for x in xrange(12)] for x in xrange(12)]
vData = [[0 for x in xrange(12)] for x in xrange(12)]
fData = [[0 for x in xrange(12)] for x in xrange(12)]

for r in range(12):
    for c in range(12):
        hData[r][c] = hFileData[r][c]
        vData[c][r] = vFileData[r][c]


for r in range(12):
    for c in range(12):
        common = re.sub('[^' + ''.join(hData[r]) + ']', '', ''.join(vData[r]))
        if len(common) == 1:
            fData[r][c] = common
        else:
            fData[r][c] = ' '

printCrossword(hData)
print '------------'
printCrossword(vData)
print '------------'
printCrossword(fData)
# just row- and column-wise traversals of the grid
# I believe these correspond exactly to your hData and vData tables
rows = [ "bac", "def", "hig" ]
cols = [ "dag", "hbe", "cfi" ]

res = [ [ set(r) & set(c) for c in cols ] for r in rows ]
print(res)
[[set(['a']), set(['b']), set(['c'])], 
 [set(['d']), set(['e']), set(['f'])], 
 [set(['g']), set(['h']), set(['i'])]]
res = [ [ next(iter(set(r) & set(c))) for c in cols ] for r in rows ]
[['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']]