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”,则以下答案有效。
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)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |