Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #36730 > unrolled thread

For Loop in List

Started bysubhabangalore@gmail.com
First post2013-01-13 04:45 -0800
Last post2013-01-13 12:41 -0500
Articles 6 — 5 participants

Back to article view | Back to comp.lang.python


Contents

  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

#36730 — For Loop in List

Fromsubhabangalore@gmail.com
Date2013-01-13 04:45 -0800
SubjectFor 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]


#36732

FromDave Angel <d@davea.name>
Date2013-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]


#36733

FromTim Chase <python.list@tim.thechases.com>
Date2013-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]


#36734

FromBoris FELD <lothiraldan@gmail.com>
Date2013-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]


#36736

FromTim Chase <python.list@tim.thechases.com>
Date2013-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]


#36743

FromMitya Sirenef <msirenef@lightbird.net>
Date2013-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