如何将列表列表中的字符串转换为浮动位置?

cat*_*zen 4 python python-3.x

my_list=[['A','B','C','0.0'],['D','E','F','1.0'],['G','H','I','0'],['J','K','L','M']

Run Code Online (Sandbox Code Playgroud)

我试过做

new_list=[[float(x) for x in i if x.isnumeric()] for i in my_list]
Run Code Online (Sandbox Code Playgroud)

输出

[[0.0],[1.0],[0],[]]
Run Code Online (Sandbox Code Playgroud)

预期输出

[['A','B','C',0.0],['D','E','F',1.0],['G','H','I',0],['J','K','L','M']
Run Code Online (Sandbox Code Playgroud)

我不知道如何将最终值转换为浮点数并就地修改值,我尝试附加。我也尝试了其他问题的答案,但他们创建了一个新列表,但我想更改原始列表。

编辑更改了我的列表以包含小数。如果数字(字符串)为“0”但不是小数“0.0”或“1.0”,则以下答案有效。

Ter*_*ryA 5

x如果x不是数字,您需要保留。你很接近:

>>> my_list = [['A','B','C','0'], ['D','E','F','1'], ['G','H','I','J']]
>>> new_list = [[float(x) if x.isnumeric() else x for x in i] for i in my_list]
>>> new_list
[['A', 'B', 'C', 0.0], ['D', 'E', 'F', 1.0], ['G', 'H', 'I', 'J']]
Run Code Online (Sandbox Code Playgroud)

请注意if x.isnumeric() else x列表推导式的内部,它位于推导式的开头,而不是结尾(因为它是三元条件)


正如您所注意到的,这是创建一个新列表,而不是修改原始列表。如果你想保留原始列表,一个基本的 for 循环会更好:

for i, sublist in enumerate(my_list):
    for j, x in enumerate(sublist):
        try:
            my_list[i][j] = float(x)
        except ValueError:
            pass

[['A', 'B', 'C', 0.0], ['D', 'E', 'F', 1.0], ['G', 'H', 'I', 'J']]
Run Code Online (Sandbox Code Playgroud)

  • 不管正确与否,问题标题说的是“就地”,而这不是就地修改。 (3认同)
  • 好吧,很公平。(不是我的反对票,顺便说一句。)虽然我想我只是用 `for sublist in my_list:` 循环,并在赋值中使用 `sublist[j] = float(x)` - 不太明白需要 `我`。 (2认同)