On May 7, 6:13 pm, Miles <[EMAIL PROTECTED]> wrote: (snipped)
> I think Yves meant to return [1, 3, 4, 5, 6], as in Perl's list slicing: > > my @x = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10); > return @x[0, 2..6]; // returns (1, 3, 4, 5, 6) > > This isn't incredibly efficient, but it does what you want (I think): > > from itertools import chain > > class multisliceable(list): > def __getitem__(self, slices): > if isinstance(slices, (slice, int, long)): > return list.__getitem__(self, slices) > else: > return list(chain(*[list.__getitem__(self, s) if isinstance(s, slice) > else [list.__getitem__(self, s)] for s in slices])) > > p = open('/etc/passwd') > q = [multisliceable(e.strip().split(':'))[0,2:] for e in p] > > -Miles There's also the operator module: import itertools import operator idx = [one for one in itertools.chain([0], range(2, 6))] wanted = operator.itemgetter(*idx) q = [wanted(line.strip().split(':')) for line in file("/etc/passwd")] -- Hope this helps, Steven -- http://mail.python.org/mailman/listinfo/python-list