我有以下格式的列表:
my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']
如您所见,它包含间隔的字符串。
我正在尝试将此列表转换为以下格式:
list_of_lists = [[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], etc....]
我一直在尝试使用以下结构:
list_2 = []
for item in my_list:
list_2.append(list(item))
list_3 = [x for x in list_2 if x != "-"]
list_4 = []
for item_2 in list_3:
var = float(item_2)
list_4.append(var)
此代码的问题在于它将两位数字转换为两个单独的数字。而且,总的来说,感觉这不是最佳解决方案。
请问有人提供指导或建议吗?
干杯:) 提前谢谢。
答案 0 :(得分:6)
你走在正确的轨道上,但你遗漏的关键是str.split()
方法可以完成大部分繁重的工作。
另外,我个人会在顶层使用列表理解来简化代码:
>>> [map(float, el.split('-')) for el in my_list]
[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]
下面:
[... el in my_list]
遍历my_list
中的字符串,将表达式(未显示)应用于每个元素,并将结果作为列表返回; el.split('-')
拆分短划线上的每个元素,将每个字符串转换为字符串列表; map(float, ...)
将子列表中的每个字符串转换为浮点数。答案 1 :(得分:3)
尝试拆分功能和地图功能
list_2 = []
for item in my_list:
list_2.append(list(map(float,item.split('-'))))
答案 2 :(得分:2)
您可以尝试这种方式:
my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']
list_2 = []
for val in my_list:
x , y = map(float, val.split('-'))
list_2.append([x, y])
print(list_2)
输出:
[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]
答案 3 :(得分:1)
my_list
原始列表split()
中的每个项目均由first
方法分为两部分,分别分配给变量second
和float()
。
由于它们仍然是字符串,在最后一个命令中我使用**/appsettings.json
函数将它们转换为数字。
答案 4 :(得分:1)
如果您不想使用地图功能,可以选择以下选项:
my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']
my_list_1 = [ [float(elem.split('-')[0]), float(elem.split('-')[1])] for elem in my_list]
print list_1
OR
my_list = ['2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70', '2-7', '10-22', '22-50', '50-70']
my_list_1 = [ [float(elem[0]), float(elem[1])] for elem in [elem.split('-') for elem in my_list]]
print list_1
以下是两种情况的结果:
[[2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0], [2.0, 7.0], [10.0, 22.0], [22.0, 50.0], [50.0, 70.0]]