Re: Is there a better way to chose a slice of a list?



On Tue, 19 May 2009 14:38:19 -0700, walterbyrd wrote:

On May 8, 5:55 pm, John Yeung <gallium.arsen...@xxxxxxxxx> wrote:
On May 8, 3:03 pm,walterbyrd<walterb...@xxxxxxxxx> wrote:

This works, but it seems like there should be a better way.

--------------
week = ['sun','mon','tue','wed','thu','fri','sat'] for day in
week[week.index('tue'):week.index('fri')]:
   print day
---------------

I think you should provide much more information, primarily why you
want to do this.  What is the larger goal you are trying to achieve?

I am just looking for a less verbose, more elegant, way to print a slice
of a list. What is hard to understand about that? I am not sure how
enumerated types help.

Printing a slice of a list is about as concise and elegant as possible:

print alist[slice_obj]

or

print alist[start:end:step]

But that's not what the example in your first post suggests. Your example
suggests you have *two* problems:

(1) Given a slice, how to print each item in the slice _individually_.

The answer to that is

for x in aslice:
print x

Pretty concise and elegant.



(2) Given an arbitrary starting and ending _item_ rather than _position_,
how to concisely and elegantly generate a slice.

There are many answers, depending on _why_ you want to do this. One
possible answer is to write a function to do it:

def print_slice(alist, start_item, end_item):
start_pos = alist.index(start_item)
end_pos = alist.index(end_item)
for x in alist[start_pos:end_pos]:
print x

Now print_slice(week, 'tue', 'fri') is pretty concise and elegant.

Another answer is: Don't do that, do something else. If you have an
enumerated type, then you could (in principle) do this:

week = enumerated('mon tue wed thu fri sat sun')
for x in week.tue-week.fri:
print x


depending on the enumerated type itself naturally.



--
Steven
.