我想像这样转换字符串:
"1.2 1.5, 3.2 1.9, 4.4 4.1"
到
[(1.2 1.5), (3.2 1.9), (4.4 4.1)]
我有以下算法:
[(float(x.split()[0]), float(x.split()[1])) for x in s.split(',')]
如何只使用一个x.split()
而不是两个?
答案 0 :(得分:3)
假设你的意思是浮动元组的列表(你的表示中缺少逗号),你可以使用map
来转换一个.split()
而不是你想要摆脱的重复。
s = "1.2 1.5, 3.2 1.9, 4.4 4.1"
[tuple(map(float, x.split())) for x in s.split(',')]
# [(1.2, 1.5), (3.2, 1.9), (4.4, 4.1)]
如果您想使用生成器而不是map
-
[tuple(float(y) for y in x.split()) for x in s.split(',')]
您可以根据需要将tuple
替换为list
。
答案 1 :(得分:1)
您可以将列表拆分为不同的细分,首先使用","
作为分隔符,然后使用" "
s = "1.2 1.5, 3.2 1.9, 4.4 4.1"
new_data = [tuple(map(float, i.split())) for i in s.split(",")]
答案 2 :(得分:1)
无论如何你必须分组,所以唯一要缩短的是删除内部分裂的显式处理:
>>> [tuple(map(float, x.split())) for x in s.split(',')]
[(1.2, 1.5), (3.2, 1.9), (4.4, 4.1)]
这也使它适应任何长度的逗号分隔组。
答案 3 :(得分:1)
使用re
进行一次拆分:
import re
a = "1.2 1.5, 3.2 1.9, 4.4 4.1"
b = re.split(' |, ', a)
res = [tuple(map(float, (b[i],b[i+1]))) for i in range(0,len(b),2)]