嵌套列表 - 字符串浮动

时间:2012-03-19 17:58:28

标签: python nested-lists

我有以下表格的嵌套列表:

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)

不幸的是,嵌套列表保持不变。我确定我犯了一个简单的错误,但我看不到它。任何帮助(和背景)将不胜感激。

4 个答案:

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