比较矩阵行和字符串

时间:2012-09-18 04:16:08

标签: python string matrix compare row

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

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']

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

2 个答案:

答案 0 :(得分: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)应该有效。

答案 1 :(得分:2)

尝试

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

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

我也不建议使用99999作为'未找到'值;使用像-1这样的值或者更好的方法是比较安全的,除非你打算处理它,否则只留下异常。

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