如何用 for 循环填充元组
How to fill a tuple with a for loop
我正在尝试使用 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
有什么想法吗?
元组是不可变的,您应该考虑将其更改为列表。
Tuples 是不可变的,所以你不能在创建它们之后修改它们。如果需要修改数据结构,则需要使用列表。
但是,您可以将生成器表达式传递给 tuple()
,而不是使用 for
循环,然后一次性创建所有元组。这将为您提供您想要的元组和一种使它干净利落的方法。
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))
由于元组是不可变的,您可以将元组转换为可变的东西,填充然后使用 tuple() 函数将其转换回元组
我正在尝试使用 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
有什么想法吗?
元组是不可变的,您应该考虑将其更改为列表。
Tuples 是不可变的,所以你不能在创建它们之后修改它们。如果需要修改数据结构,则需要使用列表。
但是,您可以将生成器表达式传递给 tuple()
,而不是使用 for
循环,然后一次性创建所有元组。这将为您提供您想要的元组和一种使它干净利落的方法。
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))
由于元组是不可变的,您可以将元组转换为可变的东西,填充然后使用 tuple() 函数将其转换回元组