1

重複の可能性:
反復中にリストを変更する

メソッド内から、クラスの本体で作成されたリストにオブジェクトを追加しようとしているPythonスクリプトを書いています。

これまでの私のコードはこれです:

class Worker:

    myList = ['one item', 'second item']

    def itter_List_Func(self, list_param):
       for item in list_param:
           more_items = item.split()
           self.myList[:] = [self.myList + item for item in more_items]

しかし、奇妙な種類のファッションのために、私はいくつかの「エラーが発生している間はリストを変更できません」に遭遇します。インプレースの変更をそのままにして、新しいアイテムを使用して新しいListオブジェクトを作成する必要がありますか?または、list_paramなどの参照が失われるため、さらに問題が発生しますか?

4

2 に答える 2

1

avasal から提供されたリンクと、スタック オーバーフローに関する詳細を読むと、私がやろうとしていることは悪い考えであることがわかりました。元のリストのコピーを反復処理するか、元のリストのコピーに割り当てを行う必要があるかもしれません。奇妙な動作、または実行時エラー。

于 2012-07-12T10:18:05.343 に答える
1

「新しいリストを直接作成する」という考えを明確にするには、次のようなものが必要です。

myList = sum((item.split() for item in myList), [])

これは単純に書かれた方法ですが、多くのアイテムがある場合は残念ながら遅くなります (sum加算は加算に依存しており、加算はlistPython で s を結合する効率的な方法ではないため)。明示的なループを使用する:

result = []
for item in myList:
    result.extend(item.split())
myList = result

つまり、リストのコピーを作成して変更しようとはしません。空のリストを作成し、元のリストをプロセスの入力として使用して、必要なものに繰り返し変換します。

ところで、ここには 2 つの設計上の問題がある可能性があります。関数が呼び出されるたびに特定の値が関数に渡されることを期待しているようで、代わりにインスタンス属性が必要なクラス属性を定義しています。

于 2012-07-12T10:44:42.593 に答える