Hi,

I'd agree with the advice that it's not the best idea: readability sucks here, but consider the following:


import time

def somefunc(a,b,c,d): # dummy function
    return "{} - {} - {} : {}".format(a,b,c,d)
l = [(time.time(),"name {}".format(n)) for n in range(100)] # dummy data

# the line in question
labels = [somefunc(*(lambda t,n: (t.tm_mon,t.tm_mday,t.tm_wday,n))(time.localtime(x[0]),x[1])) for x in l]


print(labels) # just to see the result


If you find that hard to decipher, the consider the maintainability of code you write that uses such comprehensions. You need to include comments that explain what this does, and it is easier to write a longhand version using .append() and variable assignments. I presume performance won't be an issue determining the right approach, since then you'd be using C or C++.

John

On 17/01/2014 23:49, Dan Stromberg wrote:
On Fri, Jan 17, 2014 at 3:19 PM, Piet van Oostrum <p...@vanoostrum.org> 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))

My recomendation: Don't use a list comprehension.  List comprehensions
and generator expressions are great for quick little things, but
become less readable when you have to string them over multiple
physical lines.

labels = [somefunc(mn, day, wd, name)
             for then, name in mylist
             for _, mn, dy, _, _, _, wd, _, _ in [localtime(then)]]

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to