Python:永远不要输入if语句进行转换

时间:2016-05-26 14:54:25

标签: python if-statement for-loop

我有一个列表,告诉我哪些列需要从字节转换为KB。

covert_to_kb_columns=[9, 10, 21, 22, 24]

我无法正确实现我的代码。我想检查一下,如果我在一个'idx'号码上,该号码与其中一个号码匹配 covert_to_kb_columns列表比我应该执行计算,否则保留数字。 try/except语句适用于何时 文件中没有数字只是''所以我追加零。

print covert_to_kb_columns
for idx, column_number in enumerate(columns_I_am_working_with):
    print idx
    #Check if I need to convert number from bytes to KB
    if idx == [number for number in covert_to_kb_columns]:
        print "Need to divide by 1024.0"
        data_to_use.append("{:.1f}".format(float(row[column_number]) / 1024.0))
    #Otherwise just append number as is
    else:
        try:
            float(row[column_number])
            data_to_use.append(row[column_number])
        except ValueError:
            data_to_use.append('0')

我的打印陈述给了我这样的结果:(注意'。'表示所有数字都已打印但我没有写出所有39个数字)

[9, 10, 21, 22, 24]
0
1
2
3
.
.
.
9
10
.
.
.
21
22
23
24
.
.
.
39

它似乎永远不会进入print语句来执行转换。 我认为问题在于

if idx == [number for number in covert_to_kb_columns]:

但我无法发现我做错了什么

2 个答案:

答案 0 :(得分:2)

idx == [number for number in covert_to_kb_columns]检查索引是否等于包含covert_to_kb_columns所有元素的列表。它与idx == covert_to_kb_columns相同。

您需要做的就是idx in covert_to_kb_columns

答案 1 :(得分:0)

您的if条件错误。权利是:

if idx in covert_to_kb_columns:

[number for number in covert_to_kb_columns]从您的列表covert_to_kb_columns中构建一个新列表。它们完全相同。这里没用。

使用idx == [number for number in covert_to_kb_columns],您将索引号与列表进行比较。此条件始终返回值false