2013-05-18 31 views
0

我試圖獲取包含lat/longs的位置的2d列表,並且只獲取列表中的座標(在第3列和第4列中)以發送給另一個函數距離可以計算...但我完全難住。 我已經是...從2d列表中獲取x,y並傳遞

從OP編輯,以顯示我在哪裏... X1 = -18.00 #These值不改變 Y1 = 118.00
X2 =浮動(origList [3 ]) Y2 =浮動(origList [4]) N = LEN(origList) APPLIST = []

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

但現在我得到...文件「F:\存儲\ T_2 \ coord_find.py 「,第27行,在main中,x2 = math.fabs(origList [3]) TypeError:需要浮點數

所以問題是在轉換爲浮動?

然後,所有我迄今爲findDistance功能(我只是剛剛開始它只是想測試,如果參數正確傳遞)... 高清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()參數必須是字符串或數字」。 我試圖提取浮點數值之前需要以某種方式拆分列表?

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 
+2

什麼是確切的回溯這短短的視頻?如何定義'findDistance'?什麼是'origList'? – Blender

+0

origList是帶有x和y以及其他一些字段的原始2d列表。 x是第3列,y是第4列。我循環遍歷每對x,y,並將它們發送給findDistance函數並獲得返回的距離。 – user2395759

回答

0

origList[0:]評估爲origList。嘗試origList[0]

range(0,n-1)只能達到n-2,並且無需指定起始值0,因爲這是默認值。使用range(n)

你說的座標是在第3列和第4列。看起來你對編程語言中的索引有些新穎,所以我希望我不會無意中提醒你可能正在尋找列表元素2和3,如果你的意思是這些是第3和第4列。

此外,print應該在循環之外。

+1

鑑於如何編寫循環,我會說它的'len(orglist)',而不是'len(orglist [0])'。 – 6502

+0

我添加了整個回溯,然後在計算中實現了(y1-y2),但是我把它們作爲origList [i] [3]等。我想我需要把變量x2,y2放在其他的下面,他們= origList [3]和= origList [4],或類似的東西?順便說一句,我認爲[0:]會跳過第一行,這是標題 – user2395759

+0

如果它真的是一個2d列表,len(latList)將給出記錄的數量,而len(orgList [0])會給出每條記錄的長度。所以這取決於緯度/經度是在記錄3/4還是在第3/4列。鑑於OP,我同意6502. –

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 

清清楚楚地寫着什麼傳遞給浮動既不是數也不是字符串。

只需在違規聲明之前添加一個print repr(stnList[3]),並檢查傳遞的內容。

您也可以蟒蛇調試器找到是什麼問題,檢查例子的pdb session example

+0

確定列表確實有字符串,所以我將調用改爲findDistance(x1,x2,y1,y2),並在x1,x2下面添加了y1,y2變量,所以它們是y1 = float(origList [3]),y2 = float(origList [4])但現在得到...「lat2 = float(stnList [3]) TypeError:float()參數必須是一個字符串或數字」 – user2395759

+0

我耗盡了每天閱讀源的魔力代碼沒有看到我被允許在週六早上使用。除非你向每個人展示源代碼,否則我不會告訴公衆有什麼錯誤。 – 6502

+0

Bugger,因爲它是我的第一篇文章,我得等待發布更新的代碼 – user2395759