如何在循环中初始化列表并添加元素?

0 投票
2 回答
851 浏览
提问于 2025-04-18 01:40

在一个循环里初始化一个列表,并在同一个循环中往这个列表里添加对象,是不是可以做到,而不需要每次初始化时都清空这个列表呢?

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]

这样做是可行的,因为默认参数只会被计算一次

撰写回答