什麼是最簡單/最優雅的方式做在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可以通過接受一個大小列表來改變節點的大小,每個節點一個大小。