2012-11-23 30 views
0

考慮犀牛蟒蛇下面的文本,其中arrPts是點列表理解,同時調用Python中的函數

start_point = rs.GetPoint() 
arrPts0 = [] 
arrPts0 = rs.GetPoints() 

arrPts=[] 
for ind, pt in enumerate(arrPts0): 
    arrPts.append([pt,ind, 'angle','vector',0]) 

然後我通過一個函數(DEF)將取代「角度」與實際運行arrPts名單角度的字符串(例如,「> 45」),然後我想通過下面的代碼結束調用另一個單獨的函數來運行(DEF)稱爲「add_Vectors」:

Vectors = [] 
newPts = [] 
for pt in arrPts: 
    if '>45' or '<45' in pt[2]: 
     newPts.append(pt) 

Vectors.append(add_Vectors(newPts, start_point)) 

如何可以改寫與上述部列表理解,以便它只在滿足條件時才運行創建一個新列表(newPts),但總是在主列表(arrPts)上工作,如果有一個函數(def)的方式?

類似:

Vectors.append(add_Vectors(newPts, start_point) ----> for '>45' in pt[2] 

感謝

帕烏

1H後來......試過,但似乎並沒有工作:

newPts = [] 
Vectors = add_Vectors([newPts for pt in arrPts if '<45' in pt[2]], start_point) 

回答

1

和我想我找到了正確的語法只有1行!

Vectors = add_Vectors([pt for pt in arrPts if '<45' in pt[2]], start_point) 
+0

如果您從'[]'切換到'()',您將擁有一個生成器表達式,在調用add_Vectors之前不需要生成整個列表。 – Marcin