如何将矩阵行(即列表列表)与给定字符串进行比较?
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号)。 谢谢!
答案 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))
就是你所需要的。