从 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
为什么我可以删除列表中的字符串而不是 类?如果列表中有 类 可以吗?正确的做法是什么?
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