如何初始化循环中的列表然后追加?

时间:2014-04-07 07:39:27

标签: python list loops

可以初始化循环内的列表,并在同一循环中将对象追加到列表中,而不会在启动时清除列表吗?

for j in range(5):    
  mylist=[]
  mylist.append(j)

结果将是一个包含一个元素的列表,但当然我想要一个包含5个元素的列表。有没有一个很好的方法呢?

我问,因为我需要初始化函数中的列表并多次使用此函数,每次使用该函数时都不清除列表,而是附加新对象。你明白我的意思吗?目前我正在使用这样的东西:

if first == True:
  mylist = []
  first = False

mylist.append("bla")

但它看起来不太好 提前致谢并抱歉我的英语:)

2 个答案:

答案 0 :(得分:7)

您可以定义函数以接收默认参数

def f(element, L = []):
    L.append(element)
    print L       # you can also use 'return L'

# test
for i in range(5):
    f(i)

<强>输出:

[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]

这将有效,因为default arguments are evaluated only once

答案 1 :(得分:2)

为什么不在循环/函数之前初始化列表?

save_elem_internal_list = []
def save_elem(elem):
    save_elem_internal_list.append(elem)

如果要避免使用全局变量,可以将数据存储在函数本身中:

def save_elem(elem):
    if not hasattr(elem, 'store'):
        elem.store = []
    elem.store.append(elem)

这两种解决方案都比Christian的list-default-argument版本更明显,这对我来说有点过于微妙。根据我的经验,这只会导致后来的头痛。