2

リスト内の文字列を削除できるのに、クラスを削除できないのはなぜですか? リストにクラスがある場合は可能ですか? これを行う正しい方法は何ですか?

class Temp():
    def __init__(self, name, name2):
        self.n = name
        self.n2 = name2

cltemp1 = Temp("1", "2")
cltemp2 = Temp("3", "4")

x = ["1", "2"]
clx = [cltemp1, cltemp2]


def remove_string_from_class():
    global x

    for x[:] in x:
        del x[0]

remove_string_from_class()

print x


def remove_class_from_list():
    global clx

    for clx[:] in clx:
        del clx[0]

remove_class_from_list()

print clx

TypeError: iterable のみを割り当てることができます

4

3 に答える 3

4

リストからすべてのアイテムを削除するには、単純に を使用しますlst = []。リストオブジェクトを再割り当てせずに変更する必要がある場合は、lst[:] = []代わりに使用できます。

バージョンが機能しない理由について:

間違った方法でリストを反復処理しています。反復は次のようになりますfor var in lst。関数が文字列リストで機能するという事実は、ほとんどが偶然です。x[:]最初の文字列に置き換えてから、その文字列を削除します。すべての値 (例: ) では正しく機能しませんx = ['11', '22']。ご覧のとおり、リストに反復可能でないものが含まれているとエラーが発生します。

于 2015-09-10T10:46:29.693 に答える
0

リストから要素を削除するには、これを試してください

def remove_class_from_list():
    global clx
    for c in clx[:]:
        clx.remove(c)
于 2015-09-10T10:40:49.697 に答える
0

または、次の 2 つのメソッドをクラスに追加できます。

def __iter__(self):
    return self

def next(self):
    if getattr(self, 'done', None):
        raise StopIteration
    self.done = True
    return 5

しかし、python.org のいくつかのオンライン チュートリアルから python を適切に学習することをお勧めします。

于 2015-09-10T11:07:04.717 に答える