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:只能分配一个可迭代的

4

3 回答 3

4

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

至于为什么你的版本不起作用:

您以错误的方式迭代列表。迭代应该看起来像for var in lst. 您的函数在字符串列表上工作的事实大多是偶然的:它替换x[:]为第一个字符串,然后删除该字符串。它不适用于所有值(例如x = ['11', '22']),并且如您所见,当列表包含非可迭代对象时它会出错。

于 2015-09-10T10:46:29.693 回答
0

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

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 回答
0

请尝试这个从列表中删除元素

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