2016-05-26 24 views
0

我有一個列表,告訴我哪些列需要從字節轉換爲KB。Python:從不輸入if語句進行轉換

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 

看來,它從不輸入打印語句來執行轉換。 我認爲這個問題是與線

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

但我看不出有什麼我做錯了

回答

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

0

您的if條件是false。正確的是:

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