使用Python 2.7,我想将以下格式的字符串转换为列表列表:
>>> value = "[[1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]"
>>> ...
>>> result = [[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]
Run Code Online (Sandbox Code Playgroud)
我确实设法做到了这一点,但看起来很草率.
>>> value = "[[1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]"
>>> val2 = value.replace('[[', '').replace(']]', '').split('] [')
>>> val2
['1 0 0 0', '0 1 0 0', '0 0 1 0', '0 0 0 1']
>>> val_final = [[float(x) for x in x] for x in [x.replace(' ', '') for x in val2]]
>>> val_final
[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]
Run Code Online (Sandbox Code Playgroud)
是否有更好,更清洁的方法来做到更强大?
注意:我希望字符串中只有整数或浮点值(上下文:它是对应于3D环境中对象位置的4x4矩阵).
编辑: 替代值可能包含浮点数,如下所示:
>>> value = "[[9.231 -0.123 -2 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]"
>>> ...
>>> result = [[9.231, -0.123, -2.0, 0.0], [0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 1.0]]
Run Code Online (Sandbox Code Playgroud)
使用标准库中的json.loads,稍加准备(用逗号替换空格)并要求它将所有找到的整数转换为浮点数:
>>> import json
>>> value = "[[1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]]"
>>> result = json.loads(value.replace(' ', ','), parse_int=float)
[[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]
Run Code Online (Sandbox Code Playgroud)
这应该比eval更安全,并且比手动解析字符串并将其转换为正确的数据类型更容易,json解析器将为您执行此操作.
| 归档时间: |
|
| 查看次数: |
114 次 |
| 最近记录: |