如何更改元组中的数据类型?

问题描述 投票:0回答:5

我正在处理int和float的列表,并尝试将第二个参数更改为string。

我所拥有的是这样的:

array = [(12.0, 23),(9.0, 24)]

我想要的是:

array = [(12.0, '23'),(9.0, '24')]

我尝试使用简单的for,如下所示:

for i in range(len(array)):
  array[i][1] == str(array[i][1]) 

任何人都可以向我解释为什么这行不通,如果可以的话,一种更简单的方法?非常感谢!

python string list int tuples
5个回答
1
投票

Tuples是不可变的,因此您不能只是更改它们。您需要制作新的。列表理解最简单的方法:

array = [(12.0, 23),(9.0, 24)]

array = [(a, str(b)) for a,b in array]
# [(12.0, '23'), (9.0, '24')]

如果需要更改列表,可以,但仍然需要新的元组:

array = [(12.0, 23),(9.0, 24)]

for i, (a,b) in enumerate(array):
    array[i] = (a, str(b))

array
# (12.0, '23'), (9.0, '24')]

0
投票
>>> array = [(12.0, 23),(9.0, 24)]
>>> [(x[0],str(x[1])) for x in array]
[(12.0, '23'), (9.0, '24')]
>>>

0
投票
[tuple(map(str, xs)) for xs in lst]
[('12.0', '23',) , ('9.0', '24')]

result = []
    for xs in lst:
     temp = []
      for x in xs:
         temp.append(str(x))
      result.append(tuple(temp))



result

顺便说一下,元组是不能更改的,即不可变的


0
投票

在这种情况下,创建新的元组(如其他答案所建议)通常是正确的方法,但是如果您还需要保留列表项的身份(如果您在其他地方有对它们的引用),则可以改为从元组切换为列表:

>>> array = [[12.0, 23], [9.0, 24]]
>>> for i in range(len(array)):
...     array[i][1] = str(array[i][1])
...
>>> array
[[12.0, '23'], [9.0, '24']]
>>>

但是请注意,由于您要访问带有文字索引(“ [1]”)的元素,因此元组可能是在语义上更正确使用的类型。您需要权衡一下考虑因素和列表的可变性好处。


0
投票

这是因为列表是可变的,但是元组是不可变的。不可变,表示一旦分配便无法更改。另外,string,float,integer都是不可变的python数据结构。请参阅以下链接,以获取有关列表与元组差异的更多信息。

https://realpython.com/python-lists-tuples/

© www.soinside.com 2019 - 2024. All rights reserved.