1

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

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

我希望“索引”是“行 == 文本”的行数,但上面的代码输出 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']

我想知道哪一行是“缅因州”(在这种情况下是第 3 行)。谢谢!

4

2 回答 2

2
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)应该工作。

于 2012-09-18T04:34:13.943 回答
2

尝试

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

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

我也不建议将99999其用作“未找到”值;使用 -1 之类的值会更安全,或者(更好的是)只保留异常,除非您打算处理它。

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

于 2012-09-18T04:35:01.897 回答