On 2 Gen, 19:14, Emile van Sebille <em...@fenx.com> wrote: > On 1/2/2011 9:43 AM gervaz said... > > > > > > > On 31 Dic 2010, 16:43, Emile van Sebille<em...@fenx.com> wrote: > >> On 12/31/2010 7:22 AM gervaz said... > > >>> Hi all, I would like to ask you how I can use the more efficient join > >>> operation in a code like this: > > >>>>>> class Test: > >>> ... def __init__(self, v1, v2): > >>> ... self.v1 = v1 > >>> ... self.v2 = v2 > >>> ... > >>>>>> def prg(l): > >>> ... txt = "" > >>> ... for x in l: > >>> ... if x.v1 is not None: > >>> ... txt += x.v1 + "\n" > >>> ... if x.v2 is not None: > >>> ... txt += x.v2 + "\n" > >>> ... return txt > >>> ... > >>>>>> t1 = Test("hello", None) > >>>>>> t2 = Test(None, "ciao") > >>>>>> t3 = Test("salut", "hallo") > >>>>>> t = [t1, t2, t3] > > >>>>>> prg(t) > >>> 'hello\nciao\nsalut\nhallo\n' > > >>> The idea would be create a new list with the values not None and then > >>> use the join function... but I don't know if it is really worth it. > >>> Any hint? > > >>>>>> def prg2(l): > > >> return "\n".join([x for x in l if x]) > > >> Emile > > >>> ... e = [] > >>> ... for x in l: > >>> ... if x.v1 is not None: > >>> ... e.append(x.v1) > >>> ... if x.v2 is not None: > >>> ... e.append(x.v2) > >>> ... return "\n".join(e) > >>> ... > >>>>>> prg2(t) > >>> 'hello\nciao\nsalut\nhallo' > > >>> Thanks, Mattia- Nascondi testo citato > > >> - Mostra testo citato -- Nascondi testo citato > > >> - Mostra testo citato - > > > Sorry, but it does not work > > Oh -- you want a working solution, not a hint? OK. > > class Test: > def __init__(self, v1, v2): > self.v1 = v1 > self.v2 = v2 > > t1 = Test("hello", None) > t2 = Test(None, "ciao") > t3 = Test("salut", "hallo") > t = [t1, t2, t3] > > "\n".join([y for x in t for y in [x.v1,x.v2] if y]) > > Emile > > > > > > >>>> def prg3(l): > > ... return "\n".join([x for x in l if x]) > > ... > >>>> prg3(t) > > Traceback (most recent call last): > > File "<stdin>", line 1, in<module> > > File "<stdin>", line 2, in prg3 > > TypeError: sequence item 0: expected str instance, Test found- Nascondi > > testo citato > > - Mostra testo citato -- Nascondi testo citato > > - Mostra testo citato -
Thanks Emile, despite that now the solution runs in quadratic time I guess. I could also provide a __str__(self) representation, but in my real code I don't have access to the class. Also using str() on an empty object (i.e. None), the representation is 'None'. Ciao, Mattia -- http://mail.python.org/mailman/listinfo/python-list