过去一天我一直在努力解决一个非常简单(但令人沮丧的困难)的问题。我目前有一段代码,它使用csv reader逐行循环遍历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
和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])
但是,有很多独特的术语,我必须制作过多的套装。出了什么问题?
答案 0 :(得分: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:
相反,或者你可以使用set intersection:
if {'INCORRECT_KEY_PRESSED', 'rad_mod_KA_0043-lo-mod'}.intersection(row):
答案 1 :(得分: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):
答案 2 :(得分: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:
可能总是如此。
每次有多个条件要测试时,您可能需要考虑这个问题。