On 30 Oct 2008, at 21:10, Paulo J. Matos wrote:
On Thu, Oct 30, 2008 at 8:42 PM, Arnaud Delobelle
<[EMAIL PROTECTED]> wrote:
On Oct 30, 8:07 pm, "Paulo J. Matos" <[EMAIL PROTECTED]> wrote:
Hi all,
I guess this is a recurring issue for someone who doesn't really
know
the python lib inside out. There must be a simple way to do this.
I have a list of objects [x1, x2, x3, ..., xn] and I have defined a
print method for them print_obj(). Now I want to print them
intersepersed by an element.
If I print [x1, x2, x3] interspersed by the element 10:
x1.print_obj() 10 x2.print_obj() 10 x3.print_obj()
Now, the question is, what's the best way to do this?
Defining a print_obj() method is probably a bad idea. What if you
want to print to a file for example? Instead you can define a
__str__() method for your objects and then use the join() method of
strings like this:
print ' 10 '.join(str(x) for x in lst)
Thanks for the tip but that has an issue when dealing with potentially
millions of objects. You are creating a string in memory to then dump
to a file [or screen] while you could dump to the file [or screen] as
you go through the original string. Right?
Why would you want to print millions of objects on the screen?
As for writing to a file, a million objects will probably mean a few
tens of million bytes which is not that much. Your proposed method
would not work as the python call stack would explode first. Here is
one that may meet your approval (it still requires a __str__ method on
your objects but you can adapt it easily):
def print_with_sep(sep, iterable, file=sys.stdout):
iterator = iter(iterable)
try:
file.write(str(iterator.next()))
for item in iterator:
file.write(sep)
file.write(str(item))
except StopIteration:
pass
# Use like this:
>>> print_with_sep(' 10 ', [obj1, obj2, obj3])
--
Arnaud
--
http://mail.python.org/mailman/listinfo/python-list