1

行列の行(つまりリストのリスト)を特定の文字列とどのように比較しますか?

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

「index」を「row==text」の行数にしたいのですが、上記のコードは99999を出力します。

行の1つだけに文字列が含まれていることは確かです。たとえば、マトリックスは

 ['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 に答える