繁体   English   中英

python中的分段列表推导

[英]Piecewise list comprehensions in python

在python中执行以下操作的最简单/最优雅的方法是什么:

def piecewiseProperty(aList):
    result = []
    valueTrue = 50
    valueFalse = 10

    for x in aList:
        if hasProperty(x):
            result.append(valueTrue)
        else
            result.append(valueFalse)

    return result

hasProperty是具有布尔返回值的某些函数。

一种更短(但不透明,但效率可能更低)的类似于R的方式是

trueIndexSet = set([ ind for ind,x in enumerate(aList) if hasProperty(x) ])
falseIndexSet = set(range(0:len(aList)).difference(trueIndexSet)
vals = sorted( [ (ind,10) for ind in falseIndexSet ] + [ (ind,50) for ind in trueIndexSet ] )
[ x for ind,x in vals]

另一种更整洁的方法是使用字典查找:

[ {True:50, False:10}[hasProperty(x)] for x in aList ]

是否有一些聪明易读的单行代码或内置函数来执行此操作? 基本上,这将是一个if ... else列表理解。

这个问题的应用:为了以防万一,我正在使用它来为网络中的节点分配大小,以便以不同的方式绘制它们。 我想绘制名称为“ small_”前缀大小为10的节点,并绘制其他节点大小为50的节点。NetworkX和pygraphviz可以通过接受大小列表(每个节点一个)来更改节点的大小。

使用条件表达式pep-308 ):

[50 if hasProperty(x) else 10 for x in alist]

怎么样:

[50 if hasProperty(x) else 10 for x in aList]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM