【问题标题】:Converting lat/lon strings to tuple将纬度/经度字符串转换为元组
【发布时间】:2020-01-26 02:23:51
【问题描述】:

我想创建一个将 lat/lon 字符串转换为元组的函数。 这是我尝试过的,但它给了我一个错误“无法将字符串转换为浮点数”。

感谢您的帮助。

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

convert("-122.4194, 37.7749")

输出: ValueError:无法将字符串转换为浮点数:

【问题讨论】:

  • d.replace(" ", "") 返回一个新字符串,只需:d = d.replace(" ", "")
  • 你能举个d的例子吗?
  • @MasonCaiby 你可以在电话convert("-122.4194, 37.7749")中看到和示例
  • def convert(d): return tuple(map(float,d.split(','))) # (-122.4194, 37.7749)

标签: python type-conversion tuples


【解决方案1】:

像这样使用ast.literal_eval:[docs]

>>> 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)

【讨论】:

    【解决方案2】:

    这个问题是您在列表理解中将dd.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)
    

    【讨论】:

      【解决方案3】:

      你为什么不这样做呢?这消除了将 ' ' 替换为 '' 的需要,并且还简化了您在函数中所做的工作。它也不需要任何额外的软件包。实际上,您 float() 将从您的元组中的第二点删除前导空格。

      def convert(d):
          return tuple(map(float,d.split(',')))
      
      convert("-122.4194, 37.7749")
      

      请注意,如果您确实想从字符串的开头和结尾删除空格,可以使用strip() 而不是replace(' ', '')

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-11
        • 2019-08-15
        • 1970-01-01
        • 2021-06-27
        • 1970-01-01
        • 2012-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多