2012-11-23 27 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