【问题标题】:How to fill a tuple with a for loop如何用 for 循环填充元组
【发布时间】:2020-12-08 16:35:13
【问题描述】:

我正在尝试使用 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

有什么想法吗?

【问题讨论】:

  • 元组不是不可变的吗?在这种情况下,您无法更改它是有道理的。
  • 如果parameters 的索引真的只是一组从0 到nsize - 1 的连续整数,请考虑使用列表。 parameters = list(range(1,nsize+1))。那么 Mark Meyer 的回答就变成了简单的tuple(Experiment(x) for x in parameters)

标签: python python-collections


【解决方案1】:

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))

【讨论】:

  • 这很好用,感谢您的超级快速回复!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    由于元组是不可变的,所以你可以将元组转换为可变的东西,你先做东西,然后使用 tuple() 函数将它转换回元组

    【讨论】:

      猜你喜欢
      • 2023-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-04
      • 2013-09-12
      相关资源
      最近更新 更多