2017-12-02 18 views
2

私はクレヨンの製造元向けのプログラムを作成しています。彼らは4パックの在庫を持っています(今はデバッグの出発点です)。ネストしたリストの特定のリストの値を置換する

colors=[['pink','green','blue'],['blue','green','red'],['pink',blue','yellow'],['orange','pink','yellow']] 

私は緑の色のより多くの様々なパックを取得するために真ん中にある2つのパックでクレヨンの色を変更したい:私は、リストにあることを示しました。 まず私が真ん中に緑の持つすべてのパックを見つける:

packsfound = [] 

for pack in colors: 
if pack[1]=="green": 
    packsfound.append(pack) 

print("packs with one:",packsfound) 

その後、私は私が在庫から(色)を選択したので、彼らは修正され、後で戻すことができるパックを削除します。

try: 
for pack in packsfound: 
    colors.remove(pack) 
except Exception as e: 
    print(e) 
    pass 

その後、私は交換を行います。彼らは在庫が新しく追加されたので

for pack in packsfound: 
try: 
for i, color in enumerate(packsfound): 
    position=color.index("green") 
    print("replace at:",position) 
    break 

pack[position]="yellow" 
print("replaced rows:",packsfound) 
except Exception as e: 
print(e) 
pass 

その後、私は、問題はそれだけを通過するということである

try: 
for pack in packsfound:   
    colors.append(pack) 
except Exception as e: 
    print(e) 
    pass 

print(colors) 

バックの色に変更リストを追加最初のリストを置き換え、最初の緑を置き換えます。その後、プログラムは緑がリストされておらず、第2のグリーンに代わるものではありませんと言う:私は休憩を追加して、試して移動して除くと、ループの中と外の交換ラインを動かすような多くのことを試してみました

packs with one: [['pink', 'green', 'blue'], ['blue', 'green', 'red']] 
replace at: 1 
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'green', 'red']] 
'green' is not in list 
[['pink', 'blue', 'yellow'], ['orange', 'pink', 'yellow'], ['pink', 'yellow', 'blue'], ['blue', 'green', 'red']] 

をし、合格だが何も働かない。

答えて

1

交換ループに間違いがあります。 breakステートメントを置く方法は、ループの1回の反復だけを許可します。このループを使用することができます:

for pack in packsfound: 
    try: 
     position = pack.index('green') 
     print("replace at:",position) 
     pack[position]="yellow" 
     print("replaced rows:",packsfound) 
except Exception as e: 
     print(e) 
     pass 
0

リスト内の要素を変更するのではなく、新しいリストを作成して戻す方が簡単です。 list comprehensionif/elseで簡単な使い方:

>>> mid = int(len(colors[0])/2) 
>>> [ color[:mid]+['yellow']+color[mid+1:] if color[mid]=='green' else color for color in colors ] 
=> [['pink', 'yellow', 'blue'], ['blue', 'yellow', 'red'], ['pink', 'blue', 'yellow'], ['orange', 'pink', 'yellow']] 

注OP TO:これはあなたがyellowmiddleに​​と色のみを置き換えることを検討している。そうでない場合は、すべての '緑色'の要素をyellowに置き換える必要があります。 OP TO

注:そして、これは、単一のセットの中の色の数が奇数の場合です。さもなければ、偶数の中間は2つの要素なので、それに応じてコードを変更します。

0

私はあなたの交換の手順が問題だと思います。ネストされたリストを列挙しようとしているときに間違っているようです。 .index()を使用して検索しているカラー値のインデックスを取得しているときに、リストを列挙しようとしている理由がわかりません。

packsfound = [['pink', 'green', 'blue'], ['blue', 'green', 'red']] 

for pack in packsfound: 
    try: 
    for color in pack: 
     position = pack.index('green') 
     print("replace at: ", position) 
     break 
    pack[position] = 'yellow' 
    print("replaced rows: ", packsfound) 
    except Exception as e: 
    print(e) 
    pass 

私の変数名を変更してください。この出力は:

replace at: 1 
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'green', 'red']] 
replace at: 1 
replaced rows: [['pink', 'yellow', 'blue'], ['blue', 'yellow', 'red']] 
+0

Heh ... @Toothlessと同じ応答です。 12秒でビート! xD – musikreck

関連する問題