每两处分割一个字符串并将其添加到lis中

2024-06-01 14:37:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个字符串变量:

data = "14.816,-83.828,14.878,-83.710,14.878,-83.628,14.918,-83.579,15.014,-83.503"
adata = "8.036,-82.900,8.109,-82.886,8.163,-82.909,8.194,-82.913,8.208,-82.936"

我想用一个,但每两个,分割每个变量数据,然后获取结果并将其添加到列表poly。你知道吗

最后,我希望我的清单是这样的:

poly = [(14.816,-83.828),(14.878,-83.710),(14.878,-83.628),(14.918,-83.579),(15.014,-83.503),(8.036,-82.900),(8.109,-82.886),(8.163,-82.909),(8.194,-82.913),(8.208,-82.936)]

在python中有什么简单的方法可以做到这一点吗?你知道吗


Tags: 数据方法字符串列表datapolyadata
3条回答

您可以使用grouper recipezip(*[iterator]*2)将项目成对分组:

In [151]: zip(*[iter(map(float, data.split(',')+adata.split(',')))]*2)
Out[151]: 
[(14.816, -83.828),
 (14.878, -83.71),
 (14.878, -83.628),
 (14.918, -83.579),
 (15.014, -83.503),
 (8.036, -82.9),
 (8.109, -82.886),
 (8.163, -82.909),
 (8.194, -82.913),
 (8.208, -82.936)]

到循环中的extend ^{}

for ...:
    poly.extend(zip(*[iter(map(float, data.split(',')))]*2))

由于您使用的是python2.x,因此可以使用map可以接受任意数量的iterables:

>>> map(lambda x,y: (float(x), float(y)), data.split(','), adata.split(','))
[(14.816, 8.036), (-83.828, -82.9), (14.878, 8.109), (-83.71, -82.886), (14.878, 8.163), (-83.628, -82.909), (14.918, 8.194), (-83.579, -82.913), (15.014, 8.208), (-83.503, -82.936)]

我认为这是整洁的,我真的不建议你使用这个,因为它是不向前兼容python3.x。。。你知道吗

我想py3.x的变体应该是:

map(lambda t: (float(t[0]), float(t[1])), zip(data.split(','), adata.split(',')))

如果输入数据的格式合理,则可以始终使用evalzip,例如:

data = "14.816,-83.828,14.878,-83.710,14.878,-83.628,14.918,-83.579,15.014,-83.503"
data = "[" + data + "]"
poly = [(x, y) for x, y in zip(eval(data)[::2], eval(data)[1::2])]

或者同时获得dataadata

data = "14.816,-83.828,14.878,-83.710,14.878,-83.628,14.918,-83.579,15.014,-83.503"
adata = "8.036,-82.900,8.109,-82.886,8.163,-82.909,8.194,-82.913,8.208,-82.936"
data = "[" + data + "," + adata + "]"
poly = [(x, y) for x, y in zip(eval(data)[::2], eval(data)[1::2])]

相关问题 更多 >