Quelle est la meilleure/la plus élégante façon de faire ce qui suit en python:liste Piecewise compréhensions en 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
où hasProperty
est une fonction avec une valeur de retour booléenne.
une plus courte (mais opaque, et peut-être moins efficace) R comme façon de le faire serait ce
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]
Une autre beaucoup plus net approche utiliserait recherche dans le dictionnaire:
[ {True:50, False:10}[hasProperty(x)] for x in aList ]
est-il un liner one-liner intelligent ou lisible ou intégré dans la fonction pour ce faire? Ce serait essentiellement une compréhension de la liste si ... else.
Application de cette question: au cas où il est d'intérêt, je me sers de cette taille pour attribuer aux nœuds dans un réseau afin qu'ils soient établis différemment. Je veux dessiner des nœuds nommés avec le préfixe "small_" taille 10 et dessiner les autres nœuds taille 50. NetworkX et pygraphviz peuvent modifier la taille des nœuds en acceptant une liste de tailles, une pour chaque nœud.