从 Python 中的列表中删除 类

Removing classes from list in Python

为什么我可以删除列表中的字符串而不是 类?如果列表中有 类 可以吗?正确的做法是什么?

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: can only assign an iterable

请尝试从列表中删除元素

def remove_class_from_list():
    global clx
    for c in clx[:]:
        clx.remove(c)

要从列表中删除每一项,只需使用 lst = []。如果你需要改变列表对象而不重新分配它,你可以使用 lst[:] = [] 代替。

至于为什么你的版本不行:

您以错误的方式遍历列表。迭代应该类似于 for var in lst。您的函数在字符串列表上运行的事实主要是偶然的:它将 x[:] 替换为第一个字符串,然后删除该字符串。它不能正确处理所有值(例如 x = ['11', '22']),正如您所见,当列表包含不可迭代对象时它会出错。

或者您可以将这两种方法添加到您的 class:

def __iter__(self):
    return self

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

但是我建议你通过 python.org

上的一些在线教程正确学习 python