Ein einfacher Ansatz könnte sein:
def double(li):
try:
return [double(x) for x in li]
except: # li is not iterable, recursion base case
return 2*li # or sth. else for non-numerical, non-iterable types
Beachten Sie jedoch, dass diese Lösung 'listifies' alle Arten von Iterables. Eine anspruchsvollere Version, die die Typen Ihres Iterables unterhält, kann somit jede verschachtelte Struktur von Listen handhaben, Tupel, Mengen, usw. würde diese Zeile im Try-Block:
return type(li)(map(double, li)) # should work in Python 2 and 3
Diese instanziiert und gibt ein Objekt von li
Originaltyp (Liste, Tupel, etc.) mit einer Liste (Py2) oder ein Kartenobjekt (Py3) aller verdoppelten Elemente in li
.
I empfehlen, das Verständnis beizubehalten, da 'map()' ein 'map()' -Objekt in Python 3 anstatt einer 'list' wie in Python 2 zurückgibt. – TigerhawkT3
Ah sehe ich als unternehmensbeherrschter Python 2.7-Benutzer Nuancen entziehen sich mir. Thx nochmal;) – schwobaseggl