2017-08-08 74 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