如何在循环中初始化列表并添加元素?
在一个循环里初始化一个列表,并在同一个循环中往这个列表里添加对象,是不是可以做到,而不需要每次初始化时都清空这个列表呢?
for j in range(5):
mylist=[]
mylist.append(j)
这样做的结果会是一个只有一个元素的列表,但我其实想要一个有5个元素的列表。有没有什么好的方法可以实现呢?
我之所以问这个,是因为我需要在一个函数里初始化一个列表,并且多次使用这个函数,而不想每次使用时都清空列表,而是想在原有的基础上添加新的对象。你明白我的意思吗?目前我用的是这样的方式:
if first == True:
mylist = []
first = False
mylist.append("bla")
但看起来不是很好。
提前谢谢你,对我的英语不好意思 :)
2 个回答
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提到的列表默认参数更明显,我觉得那个方法有点太隐晦了。根据我的经验,这样做之后会让人很头疼。
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]
这样做是可行的,因为默认参数
只会被计算一次。