2017-08-08 16 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に見えたが、使用してちょうど与えられた列挙私の今の問題と同じ問題です。私はカウンター変数とif/elif/elseステートメントを使用したいと思っています。私はオフィスの数少ないコーダーの1つで、他の人がこれを簡単に理解できるようにしたいと思っています。

+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] = '" No "' ' – Barmar

+0

ありがとう!私はそれが文書から引用符を引っ張っていたことを認識していませんでした。 – TobyTobyo

関連する問題