首页 > 解决方案 > Python:如何垂直和对角读取数组的元素并查看它们是否与字符串列表的元素匹配

问题描述

我想知道是否有办法检查字符数组中是否有给定列表的单词。

这是我现在的代码:

import pprint

with open("C:/Users/luca/Desktop/Homework02/cp2_Animali.txt") as f:
    contents = f.read()

output1, output2, output3,output4 = contents.split('\n\n\n', 3)



with open('output2.txt', 'w') as o1:
    o1.write(output2)

with open('output3.txt', 'w') as o2:
    o2.write(output3)

read1= open('output2.txt', 'r')
read2= open('output3.txt', 'r')
l1e=[]
for line in read1:
    l1=list(line.replace('\n','').replace('\t',''))
    l1e.append(l1)
pprint.pprint(l1e)
l2e=[]
for line in read2:
    l2=str(line.replace('\n',''))
    l2e.append(l2)
pprint.pprint(l2e)

直到现在我已经将文本文件分成两部分以获得包含网格的文本,然后转换为数组,而另一个包含我需要在网格中找到的单词的文本,单词可以重复并且相同字母可以用于更多的单词。

我的文本文件是(包括开头和结尾的空格,不包括'):

'


Z   E   B   R   E   R   G   I   T   E
P   A   G   A   Z   Z   E   L   L   A
O   E   I   E   N   E   E   E   E   E
L   T   R   N   T   O   F   A   O   T
L   N   A   E   N   A   I   R   P   N
I   E   F   E   N   M   A   A   A   O
R   P   F   T   M   U   M   G   R   R
D   R   E   I   G   N   U   N   D   E
O   E   C   A   R   G   P   I   O   C
C   S   I   N   S   E   T   T   I   O
C   G   H   E   P   A   R   D   O   N
O   M   A   T   O   P   O   P   P   I
C   A   A   L   L   I   R   O   G   R


COCCODRILLO
ELEFANTE
GAZZELLA
GHEPARDO
GIAGUARO
GIRAFFE
GNU
GORILLA
IENE
INSETTI
IPPOPOTAMO
LEONE
LEOPARDO
PUMA
RAGNI
RINOCERONTE
SERPENTE
SCIMMIA
TIGRE
ZEBRE



'

标签: pythonpython-3.x

解决方案


如果output2是您的网格,让我们假设它是唯一的、连续的字符串而不是网格。这将使搜索更容易,让我们假设它有一个 lengthn和 height m

output2 = "mystringwithagrid...."
n = 5
m = 4

然后我们可以遍历来自 的所有字符串output3,并检查是否可以在 output2 中找到具有几种模式的字符串:

for string in output3:
    length = len(string)

    # search on each line
    for i in range(m):
        for j in range(n-length):
            if output2[i*n+j:i*n+j+length] == string:
                print("found horizontally at %d,%d" % (i, j))

    # search in diagonal
    for i in range(m-length):
        for j in range(n-length):
            if output2[i*n+j:i*n+j+length:n+1] == string:
                print("found in diagonal at %d,%d" % (i, j))

添加您想要的其他模式,您就有了结果。


推荐阅读