【问题标题】:list comprehension while calling a function in python在python中调用函数时的列表理解
【发布时间】:2012-11-23 17:45:25
【问题描述】:

在 rhino python 中考虑以下文本,其中 arrPts 是点列表

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] 

谢谢

帕夫

1 小时后......尝试了这个,但似乎不起作用:

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

【问题讨论】:

    标签: python list-comprehension


    【解决方案1】:

    我想我找到了仅 1 行的正确语法!

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

    【讨论】:

    • 如果您从[] 切换到(),您将拥有一个生成器表达式,它不必在调用add_Vectors 之前生成整个列表。
    猜你喜欢
    • 1970-01-01
    • 2012-11-12
    • 2019-03-23
    • 2017-03-10
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多