如何在Python中初始化一系列包含字符串的列表?

1 投票
2 回答
19884 浏览
提问于 2025-04-16 19:44

我想要遍历一系列整数,把一个字符串,比如“array”,和循环中的数字连接起来,然后用这个结果来初始化一个列表。下面这一行代码就是我想做的,但我遇到了一个“不能给函数调用赋值”的错误。

for i in range(int(nmat)): eval('array'+str(i)) = []

而在代码的后面,下面这段代码是可以通过的(前面的代码如果注释掉就没问题)。

eval('array'+str(ct1)).append(array[1:9])

不过它告诉我,名字“array0”是未定义的(因为我不知道怎么用这种方式初始化一系列列表)。如果能帮我解决这个问题,我会非常感激,谢谢。

2 个回答

4
mylist = []
for i in range(10):
    a = ['array%i' %i]
    mylist.append(a)

print mylist


[['array0'], ['array1'], ['array2'], ['array3'], ['array4'], ['array5'], ['array6'], ['array7'], ['array8'], ['array9']]

一行代码:

mylist = [['array%i' %i] for i in range(10)]

在使用列表乘法时,你必须非常小心:

>> array = [[]] * int('3')
>> array
[[], [], []]
>> array[0] = 'imastring'
>> array
['imastring', [], []]

这还更危险:

>> array = [[]] * int('3')
>> array[0].append('repeated')
>> array
[['repeated'], ['repeated'], ['repeated']]
5

你不应该那样做。

与其使用很多变量,比如数组i,不如只用一个:array,类型是列表。比如,如果列表中的每个元素都应该是一个空列表:

array = [[] for i in range(int(nmat))]

你可以用 array[0] 来访问第一个元素,用 array[1] 来访问第二个元素,而要知道 array 中有多少个元素(在这个例子中是 int(nmat)),可以用 len(array)

撰写回答