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

Python: Never entering if statement for conversion

本问题已经有最佳答案,请猛点这里访问。

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

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

我无法正确地实现代码。我想检查一下,如果我使用的是与我不应该进行计算的EDOCX1[1]列表,否则保留数字不变。当存在文件中没有数字,只有一个"",所以我追加了一个零。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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个数字)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[9, 10, 21, 22, 24]
0
1
2
3
.
.
.
9
10
.
.
.
21
22
23
24
.
.
.
39

似乎它从未输入print语句来执行转换。我认为问题出在线路上

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

但我不能发现我做错了什么


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

你所需要做的就是idx in covert_to_kb_columns


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

1
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