2017-03-28 14 views
0

私はいくつかの助けが必要です、私は関数を使用してリストを操作する必要があります私が書いたいくつかのコードがあります。私が持っている問題は、メインのコーディングで使用するためにこの操作リストを保持することです。例えば、私はチケットの列に並んでいる4人の人の名前が入ったリストを作成し、このリストを3行目の行を削除する関数に入力しました。これは、関数の外で操作できるようにする新しいリストを作成します。これまでのコードはここまでです関数を使って変数を変更した後に、リスト(リスト)を更新したリストで更新するにはどうすればよいですか?

def aLeave(aList,usrstr): 

    tempq = [] 
    idx = 0 
    found = False 
    while idx < len(aList) and not found: #This section works out the index 
     if aList[idx] == usrstr:   # of the user string that needs removed 
      found = True     # from the queue list. 
     else: 
      idx = idx + 1 

    if found:   
     for i in range(len(aList)):   #This sections takes the index previously 
      if i == idx:      #found and uses it to create a new list 
       continue      #without the element the user has requested to be removed 
      tempq.append(aList[i]) 

    aList = tempq 
    print(aList) 
    return aList 

aList = ["john","mark","pete","dave"] 

aLeave(aList,input("what do you want to remove")) 

print (aList) 

ご協力いただければ幸いです。

おかげで(機能が「aLeave」と呼ばれる)

+0

'aList'は関数内の*ローカル変数*です。それに代入すると、グローバル 'aList'は変更されません。関数の先頭に 'global aList'を使うことができますが、それは悪いデザインです。むしろ、リストを返すだけでよいのです。しかし、 'aList = aLeave(aList、input( '...'))'のようなことをしなければなりません。そうでなければ戻り値は何にも割り当てられず、参照されずにガベージコレクションされます。あなたは 'tempq'を返すだけで、あなたの関数に' aList = tempq'を残すこともできます。 –

+0

また、実際に行っていることを達成するために2つのループを使用する必要はありません。ただ、 'x for aList:if x!= usrstr:tempq.append(x)' –

+0

ありがとう@ juanpa.arrivillaga私はコードを書いた後、もっと簡単にできることに気付きました。私はあなたの提案を試みます。 – kingpete84

答えて

3

あなただけの変数に関数の戻り値を割り当てる必要があり、あなたは同じリストを更新するために、あなたはこの中のような何かを行うことができます関数を呼び出します。それはやっているすべてのローカル変数、連想リスト更新しているので、

aList = aLeave(aList, input("Stuff")) 

また、関数の内部で、aList = tempqは、必要ありません。グローバルスコープでaListを更新するには、関数の先頭にglobal aListと記述することができますが、これは適切な設計方法とはみなされず、可能な限り避けてください。

+0

ありがとう@Shubham Jindal。私はそれを動作させるために余分なコード行を持っていました。それをスリム化して新しいリストを返すこともできました。 :) – kingpete84

関連する問題