Преобразование строк lat / lon в кортеж - PullRequest
2 голосов
/ 25 сентября 2019

Я хочу создать функцию, которая преобразует широту / долготу в кортежи.Это то, что я пробовал, но оно дает мне ошибку «не удалось преобразовать строку в число с плавающей точкой».

Спасибо за вашу помощь.

def convert(d):
    d.replace(" ", "")
    return [tuple(map(float,coords.split(','))) for coords in d.split()]

convert("-122.4194, 37.7749")

Вывод: ValueError: не удалось преобразовать строкуплавать:

Ответы [ 3 ]

2 голосов
/ 25 сентября 2019

Используйте ast.literal_eval следующим образом: [ документы ]

>>> import ast
>>>
>>> d = "-122.4194, 37.7749"
>>> print(ast.literal_eval(d))
(-122.4194, 37.7749)
>>> type(ast.literal_eval(d))
<class 'tuple'>

Этот метод будет работать, только если вы ожидаете, что ввод будет выглядеть как в вашем примере приведен кортеж типа convert("-122.4194, 37.7749")

Так что для вашего кода, если вы хотите использовать convert(d)

import ast

def convert(d):
    return ast.literal_eval(d)

convert("-122.4194, 37.7749")

Результат:

>>> x = convert("-122.4194, 37.7749")
>>> type(x)
<class 'tuple'>
>>> x
(-122.4194, 37.7749)
0 голосов
/ 25 сентября 2019

Почему бы тебе просто не сделать это?Это устраняет необходимость замены ' ' на '', а также упрощает работу, которую вы выполняли в своей функции.Также не требуется никаких дополнительных пакетов.На самом деле, вы float() уберете начальный пробел из второй точки в вашем кортеже.

def convert(d):
    return tuple(map(float,d.split(',')))

convert("-122.4194, 37.7749")

Обратите внимание, что в тех случаях, когда вы хотите удалить пробелы из начала и конца строки, вы можетеиспользуйте strip() вместо replace(' ', '').

0 голосов
/ 25 сентября 2019

Эта проблема в том, что вы разбиваете d на пробел с d.split() в вашем понимании списка.Для вашего примера ввода это не нужно.Просто разделите запятую:

def convert(d):
    d.replace(" ", "")
    return tuple(map(float,d.split(',')))

coords = convert("-122.4194, 37.7749")
print(coords)

Поскольку float() в любом случае игнорирует пробелы, вам не нужно звонить d.replace():

def convert(d):
    return tuple(map(float,d.split(',')))

coords = convert("-122.4194, 37.7749")
print(coords)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...