Python 如何在2D列表中搜索单词并创建包含行号、列号和方向的元组?

Python 如何在2D列表中搜索单词并创建包含行号、列号和方向的元组?,python,string,list,tuples,Python,String,List,Tuples,我有一个随机字母文件。我将此文件转换为二维列表。我需要一个函数来搜索该列表中的任何单词,并创建一个元组,其中包含行和列的编号以及该单词开始的方向 word="THIS" file = open("harf_uzayi.txt", "r") letter_space=[[str(n) for n in line] for line in file] for letter in word: for j,sublist in enumerate(letter_space):

我有一个随机字母文件。我将此文件转换为二维列表。我需要一个函数来搜索该列表中的任何单词,并创建一个元组,其中包含行和列的编号以及该单词开始的方向

word="THIS"
file = open("harf_uzayi.txt", "r")
letter_space=[[str(n) for n in line] for line in file] 
for letter in word:
    for j,sublist in enumerate(letter_space):
        if letter in sublist:
听了这部分我很困惑。你能帮我吗

顺便说一下,文件示例是:

IRUZHZKYGUHGCPPJGSTTNUBUYSFUBKKURMGRGPOGVCVPNFICOS
GKRHUYFGNZPGDTFBGSMCUUAJSELULLIUGRATBYYAOEIMJNSMGU
FHDLCFUKOKUNCYDVNLGIIFUMGVMRDINKOYTFDEOGPPVOEDUAGY
IFKZGBDCVTNCUCCETOATSUYUSYUGHLBJOHPOOBOLEPSPMTGBCB
TAEPRGNUOIUBSKBGFCSHZDUVLCIBMFGYKLVMYSZDSMPPAGIDVO
DKZKOMRUİCİGFYTCTPRISPLJILYSGGYYGSBFNPUJCFUCMGMYCF
LAERLKPEIDAPIYFKGCISERRGZPBCKCNBGMCGCVVDGBAFBUVSUG
IOJVKBSCGVNOHCEOGVOPORVEHILOVOIMSBODSISSLASONREUSA
GNEITNCTAJSBMGMGNJTEBUCGAGAGULTBKOJNOZIODLMOIBRTMC
HBETZJUCGRKSZPHVONOSCIOPOOYAUMJOICSYPYSDUOUCRIEKSO
TABUSHSPMAHKBBOIGUDRZLHMUPUGGÜKKIOCTIZNSGZCEÇIOGEC
DUSUINNNCKFUCNOJGNEOCCSGAIMIUEOIEFBUBETOCOODOLUETT
样本输出:

字行号列号方向
这是西区420号

您可以使用
regex
的命名捕获组
(?p)
和交替操作符

import re
with open("text.txt") as txt:
    words = "|".join(["SYUB", "TAJ", "THIS", "EDOT"])

    #   lines is a matrix
    lines = txt.readlines()
    pattern = re.compile(f"(?P<e>{words})|(?P<w>{words[::-1]})")
    for i, line in enumerate(lines):
        for word in pattern.finditer(line):
            print(word.group(0), i, word.span()[0], word.lastgroup)

    #   transpose lines and search again
    lines = [''.join(i) for i in zip(*lines)]
    pattern = re.compile(f"(?P<s>{words})|(?P<n>{words[::-1]})")
    for i, line in enumerate(lines):
        for word in pattern.finditer(line):
            print(word.group(0), word.span()[0], i , word.lastgroup)

您可以使用
regex
的命名捕获组
(?p)
和交替操作符
|

import re
with open("text.txt") as txt:
    words = "|".join(["SYUB", "TAJ", "THIS", "EDOT"])

    #   lines is a matrix
    lines = txt.readlines()
    pattern = re.compile(f"(?P<e>{words})|(?P<w>{words[::-1]})")
    for i, line in enumerate(lines):
        for word in pattern.finditer(line):
            print(word.group(0), i, word.span()[0], word.lastgroup)

    #   transpose lines and search again
    lines = [''.join(i) for i in zip(*lines)]
    pattern = re.compile(f"(?P<s>{words})|(?P<n>{words[::-1]})")
    for i, line in enumerate(lines):
        for word in pattern.finditer(line):
            print(word.group(0), word.span()[0], i , word.lastgroup)


你能为一个特定的单词添加你想要的输出吗?你能用英语发布代码吗,即英语变量名,很难阅读。我更改了它,抱歉@sayandipduttached,抱歉@azroI在谈论变量名,我不关心你的文本内容。还请指定您是查看字母组还是字母组,因为您的子列表拆分了所有字符,因此不再有单词,请给出一个输入示例和期望的输出您可以为特定单词添加所需的输出吗?您可以用英语发布代码吗,即英语变量名,很难阅读我更改了它,抱歉@sayandipduttach更改了它,抱歉@azroI在谈论变量名,我不关心您的文本内容。另外,请指定您是查看字母组还是字母组,因为子列表拆分了所有字符,所以不再有单词,请给出一个输入示例,您期望的输出应该是水平双向和垂直双向的:/@azro现在可以双向工作。谢谢帮助。只有一件事,我会用它作为一个带一个单词的函数。那么我也应该编译吗?我不明白你编译的部分。@mcora是的,因为
模式
对每一行都重复使用。最好是一次提供所有单词并调用函数,而不是调用每个单词。@mcora但如果你不能,因为你是以增量方式获取单词的,我认为有更好的方法来解决这个问题。应该以水平和垂直两种方式工作:/@azro现在以两种方式工作。谢谢帮助。只有一件事,我会用它作为一个带一个单词的函数。那么我也应该编译吗?我不明白你编译的部分。@mcora是的,因为
模式
对每一行都重复使用。最好是一次提供所有单词并调用函数,而不是调用每个单词。@mcora但如果不能,因为您是以增量方式获取单词的,我认为有更好的方法来解决这个问题。