On Saturday, January 18, 2014 4:49:55 AM UTC+5:30, Piet van Oostrum wrote: > Hi,
> I am looking for an elegant way to write the following code as a list > comprehension: > labels = [] > for then, name in mylist: > _, mn, dy, _, _, _, wd, _, _ = localtime(then) > labels.append(somefunc(mn, day, wd, name)) > So mylist is a list of tuples, the first member of the tuple is a time > (as epoch offset) and I neeed to apply a function on some fields of the > localtime of it. > I could define a auxiliary function like: > def auxfunc(then, name): > _, mn, dy, _, _, _, wd, _, _ = localtime(then) > return somefunc(mn, day, wd, name) > and then use > [auxfunc(then, name) for then, name in mylist] > or even > [auxfunc(*tup) for tup in mylist] > But defining the auxfunc takes away the elegance of a list comprehension. I > would like to integrate the unpacking of localtime() and calling somefunc > within the list comprehension, but I don't see a simple way to do that. > somefunc(mn, day, wd, name) for _, mn, dy, _, _, _, wd, _, _ in > [localtime(then)] > (i.e. using a list comprehension on a one element list to do the variable > shuffling) > works but I don't find that very elegant. > labels = [somefunc(mn, day, wd, name) > for then, name in mylist > for _, mn, dy, _, _, _, wd, _, _ in [localtime(then)]] > Python misses a 'where' or 'let'-like construction as in Haskell. +1 Yes Ive often been bitten by the lack of a 'comprehension-let' Something like this is possible?? [somefunc(mn,day,wd,name) for (_, mn,dy,_,_,_,wd,_,_), name) in [localtime(then), name for then, name in mylist]] Some debugging of the structure will be necessary (if at all possible) I dont have your functions so cant do it -- https://mail.python.org/mailman/listinfo/python-list