471,348 Members | 1,893 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,348 software developers and data experts.

skip next item in list

list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?

Jun 11 '07 #1
6 8808
2007/6/11, ahlongxp <ah******@gmail.com>:
list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?
There might be better ways to do it, but I would do:

flag_last_a = False
for a in list:
if flag_last_a:
flag_last_a = False
continue
if a=='a':
flag_last_a = True
# Whatever is done when you don't skip

--
Andre Engels, an*********@gmail.com
ICQ: 6260644 -- Skype: a_engels
Jun 11 '07 #2
ahlongxp wrote:
list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?
First - don't use list as name, as it is a builtins-name and shadowing is
likely to produce errors at some point.

list_iterator = iter(('a','d','c','d'))

for a in list_iterator:
if a == 'a':
list_iterator.next()
...

should do the trick.

Diez
Jun 11 '07 #3
On Jun 11, 8:49 am, ahlongxp <ahlon...@gmail.comwrote:
list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?

You could do this with itertools.ifilter and an predicate (pred) for a
more OO solution. I've created 2 lists, the source list (l) and the
expected answer (ans). Make sure this is what you meant in your
problem statement:

import itertools

l = ['a', 'b', 'c', 'a', 'd', 'e', 'f', 'a', 'g', 'h']
ans = ['a', 'c', 'a', 'e', 'f', 'a', 'h']

class pred(object):
def __init__(self):
self.last = None

def __call__(self, arg):
result = None

if self.last == 'a':
result = False
else:
result = True

self.last = arg

return result

i = itertools.ifilter(pred(), l)

result = list(i)

print result
print ans

assert result == ans

print 'done'

Jun 11 '07 #4
On 6/11/07, Andre Engels <an*********@gmail.comwrote:
2007/6/11, ahlongxp <ah******@gmail.com>:
list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?

There might be better ways to do it, but I would do:

flag_last_a = False
for a in list:
if flag_last_a:
flag_last_a = False
continue
if a=='a':
flag_last_a = True
# Whatever is done when you don't skip

--
Andre Engels, an*********@gmail.com
ICQ: 6260644 -- Skype: a_engels
--
http://mail.python.org/mailman/listinfo/python-list
another way:

def skip_after(l):
i = iter(l)
for x in i:
yield x
while x == 'a':
x = i.next()

depending on what to do in case of consecutive 'a's, change the
'while' for an 'if'
list(skip_after('spam aand eggs'))
['s', 'p', 'a', ' ', 'a', 'd', ' ', 'e', 'g', 'g', 's']
Jun 11 '07 #5
ahlongxp wrote:
list=('a','d','c','d')
for a in list:
if a=='a' :
#skip the letter affer 'a'

what am I supposed to do?
Maybe,
>>it = iter(['a','d','c','d'])
for item in it:
print item
if item == 'a':
x = it.next()
a
c
d
>>>
The binding of a name to it.next() is unnecessary. It just prevents 'd'
being printed.

Duncan
Jun 11 '07 #6
Thanks to all of you.
I think the next() trick is the one I'm looking for.

--
ahlongxp

Software College,Northeastern University,China
ah******@gmail.com
http://www.herofit.cn

Jun 12 '07 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by rasdj | last post: by
24 posts views Thread by Robin Cole | last post: by
2 posts views Thread by magix | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.