0

私はこの1日、非常に単純な(しかしイライラするほど難しい)問題を解決するのに苦労してきました。私は現在、csvリーダーを使用してcsvファイルを行ごとにループするコードを持っています。以前に同じループを使用して成功したので、ループは問題ではありません。それは私のifステートメントの問題のようです。

サンプルは次のとおりです。

if  'INCORRECT_KEY_PRESSED' and 'rad_mod_KA_0043-lo-mod' in row:
            userAnswerColumn.append(row[20])
            userRtColumn.append(row[21])

INCORRECT_KEY_PRESSEDこのステートメントは、行にフレーズとが含まれている場合、行の特定の場所からの値を含む2つのリストを追加することになっていますrad_mod_KA_0043-lo-mod。私はそのようなステートメントをいくつか持っていますが、行にこれらのフレーズの両方が2回以上含まれることはありません。のようなフレーズrad_mod_KA_0043-lo-modは常にユニークですが、INCORRECT_KEY_PRESSED何度も発生します。

ifステートメントは、各リストに複数のデータを追加しているため、私の条件の1つのみを使用しているようです。

私は過去にこの問題を抱えていましたが、セットを作成して次のようなことを行うことで問題を解決しました。

if (all(x in row for x in ssSet) and row[14] == '7'):
            ssColumn7.append(row[20])
            ssRtColumn7.append(row[21])

しかし、非常に多くのユニークな用語があるので、私はたくさんのセットを作らなければならないでしょう。何が問題なのですか?

4

3 に答える 3

3

ステートメント'INCORRECT_KEY_PRESSED' and 'rad_mod_KA_0043-lo-mod' in rowは次のように解釈されます。

('INCORRECT_KEY_PRESSED') and ('rad_mod_KA_0043-lo-mod' in row)

最初の部分は常にTrueです(空でない文字列は「truthy」、またはブール式ではブールTrueと見なされます)。

あなたはおそらく欲しかった:

if 'INCORRECT_KEY_PRESSED' in row and 'rad_mod_KA_0043-lo-mod' in row:

代わりに、または集合交差を使用できます。

if {'INCORRECT_KEY_PRESSED', 'rad_mod_KA_0043-lo-mod'}.intersection(row):
于 2012-11-08T15:39:51.650 に答える
0

あなたのグループ化は間違っています.pythonは次のように動作します:

if  ('INCORRECT_KEY_PRESSED') and ('rad_mod_KA_0043-lo-mod' in row):

だからあなたが必要です:

if  ('INCORRECT_KEY_PRESSED' in row) and ('rad_mod_KA_0043-lo-mod' in row):
于 2012-11-08T15:40:41.617 に答える
0
if  'INCORRECT_KEY_PRESSED' and 'rad_mod_KA_0043-lo-mod' in row:
            userAnswerColumn.append(row[20])
            userRtColumn.append(row[21])

に変更する必要があります:

if  ('INCORRECT_KEY_PRESSED'  in row) and ('rad_mod_KA_0043-lo-mod' in row):
            userAnswerColumn.append(row[20])
            userRtColumn.append(row[21])

そうでなければpythonが理解するからです

if ('INCORRECT_KEY_PRESSED') and 'rad_mod_KA_0043-lo-mod' in row:

これはおそらく常に真です。

テストする条件が複数ある場合は、その都度検討する必要があります。

于 2012-11-08T15:41:58.143 に答える