Python 将字符串转换为数组
我有一个字符串如下Python 将字符串转换为数组,python,python-3.x,Python,Python 3.x,我有一个字符串如下 144.963286 -37.814212 144.964498 -37.813854 144.964962 -37.814806 144.963711, -37.815168 我想将上面的字符串转换为如下数组: [(144.963286, -37.814212), (144.964498, -37.813854), (144.964962, -37.814806), (144.963711, -37.815168)] 使用zip进行切片: s = '144.963286
144.963286 -37.814212 144.964498 -37.813854 144.964962 -37.814806 144.963711, -37.815168
我想将上面的字符串转换为如下数组:
[(144.963286, -37.814212), (144.964498, -37.813854), (144.964962, -37.814806), (144.963711, -37.815168)]
使用
zip
进行切片:
s = '144.963286 -37.814212 144.964498 -37.813854 144.964962 -37.814806 144.963711 -37.815168'
splitted = s.split()
result = list(zip(splitted[::2], splitted[1::2]))
# [('144.963286', '-37.814212'), ('144.964498', '-37.813854'), ('144.964962', '-37.814806'), ('144.963711', '-37.815168')]
假设您使用点来分隔小数部分和小数部分(不需要逗号),我们可以
zip
来处理具有某种fillvalue
(默认值为None
)的奇数个参数的情况,比如
我们也可以在一行(相当复杂)中使用类似的
您可以使用正则表达式:
import re
s = '144.963286 -37.814212 144.964498 -37.813854 144.964962 -37.814806 144.963711, -37.815168'
pattern = r'(-?\d+\.\d+).+?(-?\d+\.\d+)'
new_s = [(float(i.group(1)), float(i.group(2))) for i in re.finditer(pattern, s)]
# [(144.963286, -37.814212), (144.964498, -37.813854), (144.964962, -37.814806), (144.963711, -37.815168)]
数组还是列表?它们非常不同。@zwer:Python3
map
将返回迭代器,所以应该可以,在Python3.6Ooops上测试,没有注意到标记,我正在将问题标记为一个类似的标记为2.x的问题的副本,这时您的答案弹出。很抱歉。⚘对于浮点数为奇数的字符串,建议使用zip\u longest
。为什么不只使用list(zip(拆分[::2],拆分[1::2])
?OP需要浮点数而不是字符串要获得浮点数插入字符串,可以将splitted=s.split()
更改为splitted=[float(i)for i in s.split()]
>>> string = '144.963286, -37.814212 42'
>>> floats = map(float, string.replace(',', '').split())
>>> from itertools import zip_longest
>>> list(zip_longest(floats, floats,
fillvalue=float('inf')))
[(144.963286, -37.814212), (42.0, inf)]
>>> from itertools import repeat
>>> list(zip_longest(*repeat(map(float, string.replace(',', '').split()),
times=2),
fillvalue=float('inf')))
[(144.963286, -37.814212), (42.0, inf)]
import re
s = '144.963286 -37.814212 144.964498 -37.813854 144.964962 -37.814806 144.963711, -37.815168'
pattern = r'(-?\d+\.\d+).+?(-?\d+\.\d+)'
new_s = [(float(i.group(1)), float(i.group(2))) for i in re.finditer(pattern, s)]
# [(144.963286, -37.814212), (144.964498, -37.813854), (144.964962, -37.814806), (144.963711, -37.815168)]