Flynn, Stephen (L & P - IT) wrote:

> Afternoon,
> 
> Python 3.
> 
> I'm iterating through a list and I'd like to know when I'm at
> the end of the said list, so I can do something different. For example
> 
> list_of_things = ['some', 'special', 'things']
> for each_entry in list_of_things:
> print(each_entry)
> if each_entry == list_of_things[-1]: # do something special to
> last entry
> ...etc
> 
> 
> Is this the idiomatic way to detect you're at the last entry in a list
> as you iterate through it?

If the list is small you can slice it:

assert items
for item in things[:-1]:
   print(item, ",", sep="")
print(items[-1])

I have written a generator similar to

>>> def g(items):
...     items = iter(items)
...     try: 
...         prev = next(items)
...     except StopIteration: 
...         return
...     for item in items:
...         yield False, prev
...         prev = item
...     yield True, prev
... 
>>> for islast, item in g("abc"):
...     print(item, "(done)" if islast else "(to be continued)", sep="")
... 
a(to be continued)
b(to be continued)
c(done)

but only used it once ore twice.

> For context, I'm working my way through a (csv) file which describes
> some database tables. I'm building the Oracle DDL to create that table
> as I go. When I find myself building the last column, I want to finish
> the definition with a ");" rather than the usual "," which occurs at the
> end of all other column definitions...
> 
> e.g.
> CREATE TABLE wibble
> (
> Col1  CHAR(2),
> Col2  NUMBER(5,2),
> );

This particular problem can idiomatically be addressed with str.join():

>>> print(",\n".join(["foo", "bar", "baz"]))
foo,
bar,
baz



_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to