Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #36730 > unrolled thread
| Started by | subhabangalore@gmail.com |
|---|---|
| First post | 2013-01-13 04:45 -0800 |
| Last post | 2013-01-13 12:41 -0500 |
| Articles | 6 — 5 participants |
Back to article view | Back to comp.lang.python
For Loop in List subhabangalore@gmail.com - 2013-01-13 04:45 -0800
Re: For Loop in List Dave Angel <d@davea.name> - 2013-01-13 08:20 -0500
Re: For Loop in List Tim Chase <python.list@tim.thechases.com> - 2013-01-13 07:29 -0600
Re: For Loop in List Boris FELD <lothiraldan@gmail.com> - 2013-01-13 14:48 +0100
Re: For Loop in List Tim Chase <python.list@tim.thechases.com> - 2013-01-13 08:07 -0600
Re: For Loop in List Mitya Sirenef <msirenef@lightbird.net> - 2013-01-13 12:41 -0500
| From | subhabangalore@gmail.com |
|---|---|
| Date | 2013-01-13 04:45 -0800 |
| Subject | For Loop in List |
| Message-ID | <f14eb990-b951-4e57-bc70-4a85f837aa51@googlegroups.com> |
Dear Group, I have a list like, >>> list1=[1,2,3,4,5,6,7,8,9,10,11,12] Now, if I want to take a slice of it, I can. It may be done in, >>> list2=list1[:3] >>> print list2 [1, 2, 3] If I want to iterate the list, I may do as, >>> for i in list1: print "Iterated Value Is:",i Iterated Value Is: 1 Iterated Value Is: 2 Iterated Value Is: 3 Iterated Value Is: 4 Iterated Value Is: 5 Iterated Value Is: 6 Iterated Value Is: 7 Iterated Value Is: 8 Iterated Value Is: 9 Iterated Value Is: 10 Iterated Value Is: 11 Iterated Value Is: 12 Now, I want to combine iterator with a slicing condition like >>> for i=list2 in list1: print "Iterated Value Is:",i So, that I get the list in the slices like, [1,2,3] [4,5,6] [7,8,9] [10,11,12] But if I do this I get a Syntax Error, is there a solution? If anyone of the learned members may kindly let me know? Apology for any indentation error,etc. Thanking You in Advance, Regards, Subhabrata
[toc] | [next] | [standalone]
| From | Dave Angel <d@davea.name> |
|---|---|
| Date | 2013-01-13 08:20 -0500 |
| Message-ID | <mailman.465.1358083283.2939.python-list@python.org> |
| In reply to | #36730 |
On 01/13/2013 07:45 AM, subhabangalore@gmail.com wrote:
> Dear Group,
>
> I have a list like,
>
>>>> list1=[1,2,3,4,5,6,7,8,9,10,11,12]
What version of Python?
> Now, if I want to take a slice of it, I can.
> It may be done in,
>>>> list2=list1[:3]
>>>> print list2
> [1, 2, 3]
>
> If I want to iterate the list, I may do as,
>
>>>> for i in list1:
> print "Iterated Value Is:",i
>
>
> Iterated Value Is: 1
> Iterated Value Is: 2
> Iterated Value Is: 3
> Iterated Value Is: 4
> Iterated Value Is: 5
> Iterated Value Is: 6
> Iterated Value Is: 7
> Iterated Value Is: 8
> Iterated Value Is: 9
> Iterated Value Is: 10
> Iterated Value Is: 11
> Iterated Value Is: 12
>
> Now, I want to combine iterator with a slicing condition like
>
>>>> for i=list2 in list1:
> print "Iterated Value Is:",i
>
> So, that I get the list in the slices like,
> [1,2,3]
> [4,5,6]
> [7,8,9]
> [10,11,12]
>
> But if I do this I get a Syntax Error, is there a solution?
It'd be only polite if you actually included the traceback, instead of
paraphrasing the error.
> If anyone of the learned members may kindly let me know?
>
> Apology for any indentation error,etc.
>
> Thanking You in Advance,
>
> Regards,
> Subhabrata
>
>
>
>
let's examine the code that generates the syntax error.
for i=list2 in list1:
That doesn't match any of the grammar of Python, so it gives a syntax
error. How could the compiler have interpreted it? Perhaps it could
have thrown out the 'for' and the colon. That would be equivalent in
this case to:
i = False
or we could toss out the "=list2" but that would give us your first loop.
If I were doing this, I'd do something like (untested):
temp = list1[:] #make a shallow copy of the list, so we're not
modifying the original
while temp
print temp[:3]
temp = temp[3:]
I think you could do something similar with zip, but I don't have the
energy this morning.
--
DaveA
[toc] | [prev] | [next] | [standalone]
| From | Tim Chase <python.list@tim.thechases.com> |
|---|---|
| Date | 2013-01-13 07:29 -0600 |
| Message-ID | <mailman.466.1358083679.2939.python-list@python.org> |
| In reply to | #36730 |
On 01/13/13 06:45, subhabangalore@gmail.com wrote: > Dear Group, > > I have a list like, > >>>> list1=[1,2,3,4,5,6,7,8,9,10,11,12] > > Now, if I want to take a slice of it, I can. > It may be done in, >>>> list2=list1[:3] >>>> print list2 [snip] > Now, I want to combine iterator with a slicing condition like > >>>> for i=list2 in list1: > print "Iterated Value Is:",i > > So, that I get the list in the slices like, > [1,2,3] > [4,5,6] > [7,8,9] > [10,11,12] Well, you get a SyntaxError because, well, it's a syntax error. It may take a little math to do this: >>> SIZE = 3 >>> for i in range(len(list1)//SICE): ... print list1[i*SIZE:i*SIZE+SIZE] ... [1, 2, 3] [4, 5, 6] [7, 8, 9] [10, 11, 12] Or, you can exploit the fact that iterators exhaust inside a for-loop: >>> i = iter(list1) >>> for item in i: ... print [item, i.next(), i.next()] ... [1, 2, 3] [4, 5, 6] [7, 8, 9] [10, 11, 12] Hope this helps, -tkc
[toc] | [prev] | [next] | [standalone]
| From | Boris FELD <lothiraldan@gmail.com> |
|---|---|
| Date | 2013-01-13 14:48 +0100 |
| Message-ID | <mailman.467.1358084954.2939.python-list@python.org> |
| In reply to | #36730 |
2013/1/13 Tim Chase <python.list@tim.thechases.com>: > On 01/13/13 06:45, subhabangalore@gmail.com wrote: > >>>> SIZE = 3 >>>> for i in range(len(list1)//SICE): > ... print list1[i*SIZE:i*SIZE+SIZE] > ... > [1, 2, 3] > [4, 5, 6] > [7, 8, 9] > [10, 11, 12] > A little shorter and simpler version: >>> x = x[1:] >>> for i in range(0,len(x),SIZE): ... print x[i: i+SIZE] ... [1, 2, 3] [4, 5, 6] [7, 8, 9] [10, 11, 12] Hope it helps > Hope this helps, > > -tkc
[toc] | [prev] | [next] | [standalone]
| From | Tim Chase <python.list@tim.thechases.com> |
|---|---|
| Date | 2013-01-13 08:07 -0600 |
| Message-ID | <mailman.468.1358085942.2939.python-list@python.org> |
| In reply to | #36730 |
On 01/13/13 07:48, Boris FELD wrote: > 2013/1/13 Tim Chase <python.list@tim.thechases.com>: >>>>> SIZE = 3 >>>>> for i in range(len(list1)//SICE): >> ... print list1[i*SIZE:i*SIZE+SIZE] > > A little shorter and simpler version: >>>> x = x[1:] >>>> for i in range(0,len(x),SIZE): > ... print x[i: i+SIZE] Doh, I always forget that range() takes an optional stride. Or rather, I use it so infrequently that I reach for other alternatives before it occurs to me :) -tkc
[toc] | [prev] | [next] | [standalone]
| From | Mitya Sirenef <msirenef@lightbird.net> |
|---|---|
| Date | 2013-01-13 12:41 -0500 |
| Message-ID | <mailman.474.1358098902.2939.python-list@python.org> |
| In reply to | #36730 |
On 01/13/2013 07:45 AM, subhabangalore@gmail.com wrote:
> Dear Group,
>
> I have a list like,
>
>>>> list1=[1,2,3,4,5,6,7,8,9,10,11,12]
> Now, if I want to take a slice of it, I can.
> It may be done in,
>>>> list2=list1[:3]
>>>> print list2
> [1, 2, 3]
>
> If I want to iterate the list, I may do as,
>
>>>> for i in list1:
> print "Iterated Value Is:",i
>
>
> Iterated Value Is: 1
> Iterated Value Is: 2
> Iterated Value Is: 3
> Iterated Value Is: 4
> Iterated Value Is: 5
> Iterated Value Is: 6
> Iterated Value Is: 7
> Iterated Value Is: 8
> Iterated Value Is: 9
> Iterated Value Is: 10
> Iterated Value Is: 11
> Iterated Value Is: 12
>
> Now, I want to combine iterator with a slicing condition like
>
>>>> for i=list2 in list1:
> print "Iterated Value Is:",i
>
> So, that I get the list in the slices like,
> [1,2,3]
> [4,5,6]
> [7,8,9]
> [10,11,12]
>
> But if I do this I get a Syntax Error, is there a solution?
>
> If anyone of the learned members may kindly let me know?
>
> Apology for any indentation error,etc.
>
> Thanking You in Advance,
>
> Regards,
> Subhabrata
>
>
>
>
Another good answer is to use a recipe from itertools docs page.
There are a lot of good recipes there and you may want to keep
them all in a module you can import from when needed. Here
is the recipe:
def grouper(n, iterable, fillvalue=None):
"""From itertools recipes: collect data into fixed-length chunks or
blocks."""
# grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
args = [iter(iterable)] * n
return zip_longest(fillvalue=fillvalue, *args)
>>> list(grouper(3, range(12))
...
...
...
... )
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11)]
HTH, - mitya
--
Lark's Tongue Guide to Python: http://lightbird.net/larks/
[toc] | [prev] | [standalone]
Back to top | Article view | comp.lang.python
csiph-web