python - 如何将列表列表中的字符串转换为原地浮动?
问题描述
my_list=[['A','B','C','0.0'],['D','E','F','1.0'],['G','H','I','0'],['J','K','L','M']
我试过做
new_list=[[float(x) for x in i if x.isnumeric()] for i in my_list]
输出
[[0.0],[1.0],[0],[]]
预期产出
[['A','B','C',0.0],['D','E','F',1.0],['G','H','I',0],['J','K','L','M']
我不知道如何将最终值转换为浮点数并就地修改值,我尝试过追加。我也尝试过其他问题的答案,但他们创建了一个新列表,但我想更改原始列表。
编辑更改了我的列表以包含小数。如果数字(字符串)为“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']]
请注意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']]
推荐阅读
- .net-core - 在应用程序之间切换时,即使访问令牌/ID 令牌有效,IdentityServer 4 也会导航到登录屏幕。有什么见解吗?
- c# - 将值从 datagridview 转换为文本框
- ruby-on-rails - 在 rails admin 中过滤虚拟字段
- java - 推特上传按钮的网址
- java - Spring Cloud Data Flow - 在 CommandLineRunner 之前处理异常
- python - XGBoost超参数ValueError的优化:标签必须由形式为0、1、2、...、[num_class - 1]的整数标签组成
- powershell - 将 $MyInvocation.UnBoundArguments 传递给 Powershell 中的嵌套函数
- html - iOS 15 邮件中的图像 HTML
- php - 如何通过 POST 从表单中传递变量?
- r - R 中的 stem 函数是否正确处理大量计数?