First attempt Editing a Python script

I did another attempt to modify the above Python code.
It works now the way i would like it to, but only for one element.
If i feed it with a list of elements only the last one is modified :disappointed_relieved:
Can anyone tell me why the code doesn’t work for multiple elements ?

import clr
import math
clr.AddReference("ProtoGeometry")
from Autodesk.DesignScript.Geometry import *

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc =  DocumentManager.Instance.CurrentDBDocument
app = DocumentManager.Instance.CurrentUIApplication.Application

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *

def tolist(obj1):
    if hasattr(obj1,"__iter__"): return obj1
    else: return [obj1]

run = tolist(IN[0])[0]
elems = tolist(UnwrapElement(IN[1]))
Xvector = tolist(IN[2])
Yvector = tolist(IN[3])
Zvector = tolist(IN[4])

outList = []
if run:
    for e, xv, yv, zv in zip(elems, Xvector, Yvector, Zvector):

	    trans = e.GetTransform()
	    trans.BasisX = xv.ToXyz()
	    trans.BasisY = yv.ToXyz()
	    trans.BasisZ = zv.ToXyz()
	    try:
		    TransactionManager.Instance.EnsureInTransaction(doc)
		    e.SetTransform(trans)
		    TransactionManager.Instance.TransactionTaskDone()
		    outList.append(e)
	    except Exception, e:
		    outList.append(e.message)
    OUT = outList
else:
    OUT = "Please set Run to True" 

Kind regards,
Mark