Python List:如何在函数使用时附加对象?

时间:2012-07-12 10:06:42

标签: python list

  

可能重复:
  Modifying list while iterating

我正在编写一个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或类似内容的引用会产生更多问题?

2 个答案:

答案 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

那就是:我们不创建列表的副本并尝试修改它;我们创建一个空白列表,并使用原始列表作为流程的输入,迭代地将其转换为我们想要的内容。

顺便说一下,这里有两个可能的设计问题:您似乎期望每次调用函数时都传递一个特定的值,并且您已经定义了一个类属性,您可能需要一个实例属性。