0

我正在尝试获取包含纬度/经度的位置的二维列表,并仅从列表中获取坐标(在第 3 列和第 4 列中)以发送到另一个函数,以便可以计算距离......但我完全难住了。我所拥有的是...

从 OP 编辑​​以显示我在哪里... x1 = -18.00 #这些值不会改变 y1 = 118.00
x2 = float(origList[3]) y2 = float(origList[4]) n = len(origList ) 应用列表 = []

for i in range (n-1):
    appList.append(findDistance(x1, y1, x2, y2))
    print appList

但现在我得到...文件 "F:\Storage\t_2\coord_find.py", line 27, in main,x2=math.fabs(origList[3]) TypeError: a float is required

所以问题在于转换为浮动???

那么到目前为止我所拥有的 findDistance 函数(我才刚刚启动它,只是想测试参数是否正确传递)... def findDistance(x1, y1, x2, y2): cosX = math.fabs(y1 - y2) a = 90 - x2 b = 90 - x1


这是我更新的代码,它给了我这个......

delx = math.fabs(y1 - y2)

TypeError: 不支持的操作数类型 -: 'float' 和 'list'

我发布它是因为我显然没有给出足够清晰的解释,并且从那以后进行了一些更改。如您所见,我想从 cols 3,4 获取 x2,y2。试过 x2=float(origList[3]), y2=float(origList[4]) 但这也不起作用 - 我得到“float()argument must be a string or a number”。在尝试将值提取为浮点数之前,我是否需要以某种方式拆分列表?

import csv
import math

def fZone():
    origList = [['200','12_7','Cons_pl','-20.10','120.10','C_10_T2'],['....'...]]
    # origList has 30+ lines like this
    x1 = -20.68     # Fixed point
    x2 = 117.19     # Fixed point
    n = len(origList)   # list length
    appList = []    # to hold returned 

    for i in range (n):
        x2= origList[3] # I wanna get the '-20.10' col each iteration
        y2= origList[4] # I wanna get the '120.10' col each iteration
        appList.append(findDist(x1, y1, x2, y2))
        print appList

def findDist(x1,y1,x2,y2):
    delx = math.fabs(y1 - y2)
        a = 90 - x2
        b = 90 - x1  # formula is not finished
4

2 回答 2

0

显然您的列表包含成对的字符串,而不是数字。

在 Python 中,这种转换永远不会自动进行,因此您可能必须将代码更改为:

findDistance(x1, y1, float(origList[i][3]), float(origList[i][4]))

像这样的错误

lat2= float(stnList[3])
TypeError: float() argument must be a string or a number

清楚地表明传递给 float 的内容既不是数字也不是字符串。

只需在有问题的语句之前添加一个print repr(stnList[3])权利,然后查看传递的内容。

您还可以使用 python 调试器来查找问题所在,例如查看这个pdb session 示例的短视频

于 2013-05-18T05:48:52.977 回答
0

您的origList[0:]评估结果为origList。试试origList[0]

range(0,n-1)仅上升到 n-2,并且您无需指定起始值 0,因为无论如何这是默认值。使用range(n).

你说坐标在第 3 列和第 4 列。看起来你对编程语言中的索引有点陌生,所以我希望我不要无缘无故地提醒你,你可能正在寻找列表元素 2 和 3,如果您的意思是这些是第 3 列和第 4 列。

此外,print应该在循环之外。

于 2013-05-18T05:43:06.877 回答