可以初始化循环内的列表,并在同一循环中将对象追加到列表中,而不会在启动时清除列表吗?
for j in range(5):
mylist=[]
mylist.append(j)
结果将是一个包含一个元素的列表,但当然我想要一个包含5个元素的列表。有没有一个很好的方法呢?
我问,因为我需要初始化函数中的列表并多次使用此函数,每次使用该函数时都不清除列表,而是附加新对象。你明白我的意思吗?目前我正在使用这样的东西:
if first == True:
mylist = []
first = False
mylist.append("bla")
但它看起来不太好 提前致谢并抱歉我的英语:)
答案 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]
答案 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版本更明显,这对我来说有点过于微妙。根据我的经验,这只会导致后来的头痛。