Python 如何从有字母的行和列中获取单词?

Python 如何从有字母的行和列中获取单词?,python,python-3.x,Python,Python 3.x,在做作业时,我突然想到了这个问题 def board_contains_word(board, word): '''(list of list of str, str) -> bool Return True if and only if word appears in board. Precondition: board has at least one row and one column. >>> board_contains_

在做作业时,我突然想到了这个问题

def board_contains_word(board, word):
    '''(list of list of str, str) -> bool

    Return True if and only if word appears in board.

    Precondition: board has at least one row and one column.

    >>> board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'ANT')
    True
    '''
 return word in board
但是我得到了
FALSE


提前感谢

中的python
操作符的工作方式与您使用它的方式略有不同。以下是一些例子:

>>> 'laughter' in 'slaughter'
True
>>> 1 in [1,6,5]
True
>>> 'eta' in ['e','t','a']
False
>>> 'asd' in ['asdf','jkl;']
False
>>> 
如您所见,它有两个主要用途:测试一个字符串是否可以在另一个字符串中找到,以及测试一个元素是否可以在数组中找到。还要注意,这两种用途不能结合使用

现在,关于解决你的问题。您需要某种循环
,以便逐个遍历所有行。一旦选择了一行,就需要某种方法将所有数组元素
连接在一起。在那之后,你就可以知道这个单词是否在棋盘上


注意:这只解决了水平搜索的问题。不知道这是不是全部任务。您可以使用
zip
功能调整此方法以进行垂直搜索。

以下是一些可以让您摆脱困境的方法:

def board_contains_word(board, word):
    # check accross
    for row in board:
        return word in ''.join(row):

    # try with board's rows and columns transposed
    for row in zip(*board):
        return word in ''.join(row):

    return False

print board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'ANT')
print board_contains_word([['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']], 'TO')

提示:您可以通过使用
any()
函数来简化操作。

那么,您是在尝试查看单词是否出现在一行中,还是在尝试查看单词是否出现在板中的某个位置,如交叉字谜?只需在黑板上检查
单词
两种方法都不起作用,但如果你想要一个易懂的答案,你真的需要更清楚。要添加到@BenTrofatter的注释中,对角线需要匹配吗?向后的单词(例如,一行
['T','N','a']
)如何?至少,您需要手动检查任何子列表是否以正确的顺序包含单词的所有字母。如果您还必须检查任何一列字母是否包含这些字母,则必须将其作为单独的电路板数据进行传递,对角线也是如此。仅供参考,您可以使用
zip(*board)
来处理所有电路板尺寸。顺便说一句,
list
调用是不必要的<代码>for
循环足够智能,可以在没有它们的情况下打开发电机的包装。@NickODell:好的,删除了。很明显,我不是Py 3高手。感谢@martineau和Nick ODell…分享你的知识,帮助我解决问题。你发布的代码是我的实际问题。这对我来说更好…谢谢!!