Kyoto
Kyoto

Reputation: 33

Simultanious Iteration via 4 Indexes

I worte a code to iterate trough a string or list via multiple indexes and in reverse order, 2 going forward and 2 going backwords. However due to the range limitiation given to the for loop in Iteration 1 and Iteration 3 I can't get the final char or list element. Here is the code:

mix = 'fdsfef232'
for i in range(len(mix)-1):
    print('Iter 1:>>>',mix[i],'\tIter 2:>>>',mix[i+1],'\tIter 3:>>>',mix[-1-i],'\tIter 4:>>>',mix[-2-i])

Here is the Output:

Iter 1:>>> f    Iter 2:>>> d    Iter 3:>>> 2    Iter 4:>>> 3
Iter 1:>>> d    Iter 2:>>> s    Iter 3:>>> 3    Iter 4:>>> 2
Iter 1:>>> s    Iter 2:>>> f    Iter 3:>>> 2    Iter 4:>>> f
Iter 1:>>> f    Iter 2:>>> e    Iter 3:>>> f    Iter 4:>>> e
Iter 1:>>> e    Iter 2:>>> f    Iter 3:>>> e    Iter 4:>>> f
Iter 1:>>> f    Iter 2:>>> 2    Iter 3:>>> f    Iter 4:>>> s
Iter 1:>>> 2    Iter 2:>>> 3    Iter 3:>>> s    Iter 4:>>> d
Iter 1:>>> 3    Iter 2:>>> 2    Iter 3:>>> d    Iter 4:>>> f

How can I make sure that Iter 1 and Iter 3 they both reach the end of the string? Thanks

Upvotes: 3

Views: 54

Answers (2)

Edwin van Mierlo
Edwin van Mierlo

Reputation: 2488

Valid answer with module collections already given, here is one without import.

Basically calculating your indexes first, given the limitation of the length of the input string, and wrap-around when the end is reached, example:

mix = 'fdsfef232'
for i in range(len(mix)):
    a = i
    b = 0 if (i+1) > len(mix)-1 else i+1
    c = 0 if (-1-i) < (0-len(mix)-1) else -1-i
    d = -1 if (-2-i) < (0-len(mix)) else -2-i
    print('Iter 1:>>>',mix[a],'\tIter 2:>>>',mix[b],'\tIter 3:>>>',mix[c],'\tIter 4:>>>',mix[d])

output:

Iter 1:>>> f    Iter 2:>>> d    Iter 3:>>> 2    Iter 4:>>> 3
Iter 1:>>> d    Iter 2:>>> s    Iter 3:>>> 3    Iter 4:>>> 2
Iter 1:>>> s    Iter 2:>>> f    Iter 3:>>> 2    Iter 4:>>> f
Iter 1:>>> f    Iter 2:>>> e    Iter 3:>>> f    Iter 4:>>> e
Iter 1:>>> e    Iter 2:>>> f    Iter 3:>>> e    Iter 4:>>> f
Iter 1:>>> f    Iter 2:>>> 2    Iter 3:>>> f    Iter 4:>>> s
Iter 1:>>> 2    Iter 2:>>> 3    Iter 3:>>> s    Iter 4:>>> d
Iter 1:>>> 3    Iter 2:>>> 2    Iter 3:>>> d    Iter 4:>>> f
Iter 1:>>> 2    Iter 2:>>> f    Iter 3:>>> f    Iter 4:>>> 2

Upvotes: 1

franchb
franchb

Reputation: 1204

from collections import deque

mix = deque('fdsfef232')
while len(mix)>=4:
    print('Iter 1:>>>', mix.popleft())
    print('Iter 2:>>>', mix.popleft())
    print('Iter 3:>>>', mix.pop())
    print('Iter 4:>>>', mix.pop())


if len(mix)>0:
    print('Iter 1:>>>', mix.popleft())

if len(mix)>0:
     print('Iter 2:>>>', mix.popleft())

if len(mix)>0:
    print('Iter 3:>>>', mix.popleft())

Upvotes: 1

Related Questions