0

我正在尝试使用 for 循环用命名元组填充一个元组。

下面的示例代码有效:

import collections

Experiment = collections.namedtuple('Experiment', ['parameter', ])

nsize = 3

parameters = {}
for n in range(0, nsize):
    parameters[n] = n +1
   

experiments = (
        Experiment(parameter = parameters[0]),   
        Experiment(parameter = parameters[1]),
        Experiment(parameter = parameters[2]),)

但是,我想用 for 循环替换最后一部分:

for n in range(0, nsize):
    experiments[n] = Experiment(parameter = parameters[n])

这给出了错误:

TypeError: 'tuple' object does not support item assignment

有任何想法吗?

4

3 回答 3

4

元组是不可变的,因此您无法在创建它们后对其进行修改。如果需要修改数据结构,则需要使用列表。

for但是,您可以将生成器表达式传递给并一次生成所有元组,而不是使用循环tuple()。这将为您提供所需的元组以及使其干净的方法。

import collections

Experiment = collections.namedtuple('Experiment', ['parameter', ])

nsize = 3

parameters = {}
for n in range(0, nsize):
    parameters[n] = n + 1
    
expirements = tuple(Experiment(parameter = parameters[n]) for n in range(nsize))
# (Experiment(parameter=1), Experiment(parameter=2), Experiment(parameter=3))
于 2020-12-08T16:40:45.160 回答
0

元组是不可变的,您应该考虑将其更改为列表。

于 2020-12-08T16:38:52.970 回答
0

由于元组是不可变的,因此您可以将元组转换为可变的东西,您是否填充,然后使用 tuple() 函数将其转换回元组

于 2020-12-08T16:45:28.697 回答