我正在处理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])
任何人都可以向我解释为什么这行不通,如果可以的话,一种更简单的方法?非常感谢!
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')]
>>> array = [(12.0, 23),(9.0, 24)]
>>> [(x[0],str(x[1])) for x in array]
[(12.0, '23'), (9.0, '24')]
>>>
[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
顺便说一下,元组是不能更改的,即不可变的
在这种情况下,创建新的元组(如其他答案所建议)通常是正确的方法,但是如果您还需要保留列表项的身份(如果您在其他地方有对它们的引用),则可以改为从元组切换为列表:
>>> 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]
”)的元素,因此元组可能是在语义上更正确使用的类型。您需要权衡一下考虑因素和列表的可变性好处。
这是因为列表是可变的,但是元组是不可变的。不可变,表示一旦分配便无法更改。另外,string,float,integer都是不可变的python数据结构。请参阅以下链接,以获取有关列表与元组差异的更多信息。