如何将矩阵行(即列表列表)与给定字符串进行比较?
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)
应该起作用。