Comment appliquer une fonction sur une liste possédante une multi-imbrication ?
if this article is not in your language, use the Google Translate widget (bottom of page for Mobile version)⬈
Il peut arriver que l'on souhaite restituer au travers d'un nœud Python la même structure que la liste d'entrée.
Voici un exemple avec une fonction récursive appelant une autre fonction (opération à effectuer).
Ici, on convertit une liste de points en liste sphère en gardant la même structure.
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
def convertPointToSphere(pt):
return Sphere.ByCenterPointRadius(pt, 1)
def nestedRecursFunc(lst, functoApply):
newlst = list(lst)[:] # copy input list and convert it (if necessary)
for idx, elem in enumerate(lst):
if isinstance(elem, list) and len(elem) > 0:
newlst[idx] = nestedRecursFunc(lst[idx], functoApply)
elif isinstance(elem, list) and len(elem) == 0:
newlst[idx] = []
else:
newlst[idx] = functoApply(lst[idx])
return newlst
multi_NestedList = IN[0]
OUT = nestedRecursFunc(multi_NestedList, convertPointToSphere)
Une autre solution avec l'arrivée de Python3 et numpy, cela suppose que votre liste d'entrée est homogène (tableau)
import sys
import clr
clr.AddReference('Python.Included')
import Python.Included as pyInc
path_py3_lib = pyInc.Installer.EmbeddedPythonHome
sys.path.append(path_py3_lib + r'\Lib')
sys.path.append(path_py3_lib + r'\Lib\site-packages')
import numpy as np
data, search_value, replace_value = IN
array_3d = np.array(data).astype(object)
array_3d[array_3d == search_value] = replace_value
OUT = array_3d.tolist()
0 commentaires:
Enregistrer un commentaire