我正在编写一个python脚本,我试图将对象附加到在类的主体中创建的List中,从方法内部。
到目前为止,我的代码是:
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或类似内容的引用会产生更多问题?
答案 0 :(得分:1)
好的,从avasal提供给我的链接,以及一些关于堆栈溢出的进一步阅读,我明白我想做的是一个坏主意。也许我应该尝试对原始列表的副本进行迭代,或者对原始列表的副本进行分配,因为如果我在进行迭代时对列表进行更改,则不会通知itterators,奇怪的行为,或运行时错误。
答案 1 :(得分:1)
要明确“直接创建新列表”的想法,您需要以下内容:
myList = sum((item.split() for item in myList), [])
这是简单编写的方式,如果你有很多项目(因为sum
依赖于添加,而且加法不是在Python中加入list
的有效方法) )。使用显式循环:
result = []
for item in myList:
result.extend(item.split())
myList = result
那就是:我们不创建列表的副本并尝试修改它;我们创建一个空白列表,并使用原始列表作为流程的输入,迭代地将其转换为我们想要的内容。
顺便说一下,这里有两个可能的设计问题:您似乎期望每次调用函数时都传递一个特定的值,并且您已经定义了一个类属性,您可能需要一个实例属性。