[英]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可以通过接受大小列表(每个节点一个)来更改节点的大小。
怎么样:
[50 if hasProperty(x) else 10 for x in aList]
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.