0

过去一天我一直在努力解决一个非常简单(但非常困难)的问题。我目前有一段代码,它使用 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如果该行包含短语and ,则该语句应该附加两个列表,其中包含来自行中特定位置的值rad_mod_KA_0043-lo-mod。我有几个这样的陈述,但一行从来没有超过一次这两个短语。像这样的短语rad_mod_KA_0043-lo-mod总是独一无二的,但INCORRECT_KEY_PRESSED会出现很多次。

似乎 if 语句只使用了我的一个条件,因为它向每个列表附加了多个数据。

我过去曾遇到过这个问题,并通过创建集合并执行以下操作来解决它:

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)

第一部分始终为真(非空字符串为“真”,或在布尔表达式中被视为布尔真)。

你可能想要:

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 回答