【问题标题】:Python - 'tuple' object does not support item assignmentPython - “元组”对象不支持项目分配
【发布时间】:2013-04-24 14:15:57
【问题描述】:

您好,我被困在元组类型的更改值上。我知道我不能改变元组类型的值,但是有没有办法改变它???

a=[('z',1),('x',2),('r',4)]
for i in range(len(a)):
     a[i][1]=(a[i][1])/7  # i wanna do something like this !!!

我想将 a 中的数字更改为概率,例如:1/7、2/7、4/7 有没有办法将 a 的数量更改为浮点数?例如

a=[('z',0.143),('x',0.285),('r',0.571)]

【问题讨论】:

  • 如果你想换一个tuple,你真的需要一个list
  • 替换整个元组,而不仅仅是一个组件。砰!

标签: python tuples


【解决方案1】:

最简单的可能是将元组变成列表:

a=[['z',1], ['x',2], ['r',4]]

与元组不同,列表是可变的,因此您可以更改单个元素。

【讨论】:

  • @TommyNgo: a = map(list, a).
  • @TommyNgo 你必须列出项目。 a 已经是一个列表。如上所示使用map,或列表理解new_list = [list(x) for x in a]
【解决方案2】:

要更改为float 很简单

from __future__ import division # unnecessary on Py 3

一个选项:

>>> a=[('z',1),('x',2),('r',4)]
>>> a = [list(t) for t in a]
>>> for i in range(len(a)):
            a[i][1]=(a[i][1])/7


>>> a
[['z', 0.14285714285714285], ['x', 0.2857142857142857], ['r', 0.5714285714285714]]

可能是最好的方法:

>>> a=[('z',1),('x',2),('r',4)]
>>> a[:] = [(x, y/7) for x, y in a]
>>> a
[('z', 0.14285714285714285), ('x', 0.2857142857142857), ('r', 0.5714285714285714)]

根据 cmets 的要求,“存储和不打印”保留 3 位小数

>>> import decimal
>>> decimal.getcontext().prec = 3
>>> [(x, decimal.Decimal(y) / 7) for x, y in a]
[('z', Decimal('0.143')), ('x', Decimal('0.286')), ('r', Decimal('0.571'))]

【讨论】:

  • 这个数字能有 3 dp 吗??
  • 用于存储而不是打印出来
  • @TommyNgo floats don't work like that... 但是您可以使用 decimal 模块,我将更新以显示这一点。另外,为什么您只想要 3 个位置用于打印?
猜你喜欢
  • 2015-02-05
  • 2013-12-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2018-03-13
  • 1970-01-01
  • 2017-12-17
相关资源
最近更新 更多