2017-11-14 1 views
0
from random import choice 

inputs=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0'] 
func={} 
code="" 
z=len(inputs) 
x=z-1 
temp=inputs 
while x>=0: 
    y=choice(temp) 
    print(str(x)+" "+inputs[x]+" "+y) 
    func[inputs[x]]=y 
    code=code+inputs[x]+y 
    del temp[x] 
    x=x-1 
    print(temp) 
    print(inputs) 

なぜこのコードは、入力のすべての要素を入力の一意でランダムな要素(一時ダミーセット)にしないのですか?ダミーセットからアイテムを削除するように指示されたときには、tempと入力の両方からアイテムを削除するように見えます。ダミー変数に影響を与えずにリストから削除する

ありがとうございました。

+0

'temp'と' inputs'は同じオブジェクトの異なる名前です。 –

答えて

2

あなたが代わりにそれの真のコピーのリストのエイリアスを作成している: あなたは「一時=入力」を実行するときは、「入力」のコピーを作成していないtemp=inputs[:]

import random 

inputs = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','0'] 
func = {} 
code = "" 
z = len(inputs) 
x = z-1 
temp = inputs[:] #<-- here 
while x >= 0: 
    y = random.choice(temp) 
    print(str(x) + " " + inputs[x] + " " + y) 
    func[inputs[x]] = y 
    code = code+inputs[x] + y 
    del temp[x] 
    x = x - 1 
    print(temp) 
    print(inputs) 
1

temp=inputsを置き換えます同じコンテンツにアクセスするための新しい変数を作成します。リストの新しいコピーが必要な場合は、 'temp = inputs [:]'を使用します。それ以外の場合は、同じオブジェクトへの新しい参照を作成するだけで、オブジェクト自体を複製することはありません。

詳細についてはofficial Python FAQをご覧ください。

関連する問題