比较矩阵行与字符串



如何将矩阵行(即列表列表)与给定字符串进行比较?

index = 99999
for i in range(len(text)):
    if (matrix[i][0:len(text)] == text):
        index = i

我希望"index"是"row == text"的行数,但上面的代码输出 99999。

我确定其中一行包含字符串。例如,矩阵是

 ['a', 'i', 'n', 'e', 'm']
 ['e', 'm', 'a', 'i', 'n']
 ['i', 'n', 'e', 'm', 'a']
 ['m', 'a', 'i', 'n', 'e']
 ['n', 'e', 'm', 'a', 'i']

我想知道哪一行是"maine"(在本例中为 3)。谢谢!

尝试

try:
    index = matrix.index(list(text))
except IndexError:
    index = 99999

list(text)将字符串转换为字符列表。 list.index搜索指定的项目(使用 == 作为相等比较),如果找到,则返回其索引,如果未找到,则提高IndexError

我也不建议使用99999作为"未找到"值;使用像-1这样的值更安全,或者(更好的是)只保留异常,除非你打算处理它。

如果您知道字符串必须在矩阵中,那么index = matrix.index(list(text))就是您所需要的。

for idx,row in enumerate(matrix):
  if ''.join(row) == text:
    print idx

或者,作为单行:

idx = [''.join(x) for x in matrix].index(text)

至于为什么你的尝试没有成功,原因是这个测试:

matrix[i][0:len(text)] == text

在您期望它成功的点上,您实际上是在将列表与字符串进行比较,但['m', 'a', 'i', 'n', 'e'] != 'maine' . 但是,matrix[i][0:len(text)] == list(text)应该起作用。

相关内容

  • 没有找到相关文章

最新更新