我有以下表格的嵌套列表:
my_list = [['Some1', '2', '3.6', '4.5', 'GB2', '6'],
['Some2', '3.9', '4', '5', 'HG5', '7.3'],
['Some3', '4', '5', '6.1', 'H2D', '8.9']]
每个子列表的每个元素都是一个字符串,但我想将所有纯数字字符串转换为浮点数。
所以我尝试以下代码:
for row in my_list:
for k, item in enumerate(row):
if k in (1, 2, 3, 5):
item = float(item)
不幸的是,嵌套列表保持不变。我确定我犯了一个简单的错误,但我看不到它。任何帮助(和背景)将不胜感激。
答案 0 :(得分:4)
重新分配名称item
将永远不会更改列表。试试这个:
for row in my_list:
for k in (1, 2, 3, 5):
row[k] = float(row[k])
请注意,Python名称只是附加到某些对象的标记。像
这样的一行item = float(item)
将计算float(item)
,然后将名称item
绑定到返回的对象。这对之前指向的对象item
没有任何作用。而且,在这种情况下,不可能改变后一个对象 - 字符串是不可变的。
答案 1 :(得分:4)
您没有影响原始列表;你只是从一些元素中制作一个浮点数,并依次给它命名为“item”。你可以使用像
这样的东西row[k] = float(item)
但我可能会做类似
的事情def floatify(x):
try:
return float(x)
except ValueError:
return x
my_list2 = [[floatify(x) for x in row] for row in my_list]
答案 2 :(得分:1)
for index1, row in enumerate(my_list):
for index2, item in enumerate(row):
try:
my_list[index1][index2] = (float(item))
except ValueError:
pass
print my_list
[['Some1', 2.0, 3.6000000000000001, 4.5, 'GB2', 6.0],
['Some2', 3.8999999999999999, 4.0, 5.0, 'HG5', 7.2999999999999998],
['Some3', 4.0, 5.0, 6.0999999999999996, 'H2D', 8.9000000000000004]]
答案 3 :(得分:0)
您需要将行元素重新分配给新的计算值,例如
row[k] = float(item)