2017-08-08 69 views
0

我試圖編輯列表中的值,這樣我可以使這個列表與我的程序中其他地方的另一個列表類似。Python沒有替換列表中的值

我得到的值的列表從文檔,並希望把「關」到「否」,「開」到「有」,「」成「空」等

然而,下面的代碼是不是出於某種原因更換這些值:

counter = 0 
while counter < len(value_list)-1: 
    if str(value_list[counter]) in ("", " ", "N/A"): 
     value_list[counter] = "Null" 
    elif str(value_list[counter]) == "Off": 
     value_list[counter] = "No" 
    elif str(value_list[counter]) == "On": 
     value_list[counter] = "Yes" 
    counter += 1 
    print counter, value_list[counter] 

我的輸出(我只是把剪刀,因爲它的幾百行):

0 "" 
1 "" 
2 "" 
... 
7 "Off" 
8 "Off" 
9 "Off" 
10 "Off" 
... 
556 "" 
557 "" 

我看着this post,但使用列舉剛剛給了我現在有同樣的問題。最好,我想堅持一個計數器變量,如果/ elif/else語句,因爲我是我辦公室中少數幾個編程人員之一,並且希望其他人輕鬆理解這一點!

+0

你是故意跳過列表的最後一個元素? – Barmar

回答

1

你這裏給出的輸出是不可能的:

counter = 0 
while counter < len(value_list)-1: 
    if str(value_list[counter]) in ("", " ", "N/A"): 
     value_list[counter] = "Null" 
    elif str(value_list[counter]) == "Off": 
     value_list[counter] = "No" 
    elif str(value_list[counter]) == "On": 
     value_list[counter] = "Yes" 
    counter += 1 
    print counter, value_list[counter] 

你首先增量counter,然後纔打印。這意味着您將首先輸出counter作爲1.
這也意味着您打印value_list中的下一個位置(您尚未觸摸它)。
另外,您的循環在最後一個元素之前停止。

應該是這個樣子:

translation_dict = {"": "Null", 
        " ": "Null", 
        "N/A": "Null", 
        "Off": "No", 
        "On": "Yes"} 
for counter in range(len(value_list)): 
    old_value = str(value_list[counter]).strip('"') 
    if old_value in translation_dict: 
     value_list[counter] = translation_dict[old_value] 
     print counter, value_list[counter] 
+0

謝謝!我的命令必須完全消隱。 – TobyTobyo

+1

它解決了這個問題嗎? –

+0

是的,你做到了。但是,從我從文檔中獲取數據時,它也引入了「雙引號」。 – TobyTobyo

2

看起來你的字符串實際上包含雙引號。無論是從字符串中刪除:

while counter < len(value_list)-1: 
    value = value_list[counter].strip('"') 
    if value in ("", " ", "N/A"): 
     ... 

或將它們添加到你對比較值:

elif str(value_list[counter]) == '"Off"': 
           ^^^^^^^ this a string literal containing the 
             characters ", O, f, f, " 
+0

爲了保持一致性,他可能希望在替換中包含雙引號:'value_list [counter] ='「否」'' – Barmar

+0

謝謝!我沒有意識到它正在從文件中引用。 – TobyTobyo