【问题标题】:Simultanious Iteration via 4 Indexes通过 4 个索引同时迭代
【发布时间】:2018-07-16 15:51:14
【问题描述】:

我编写了一个代码,通过多个索引以相反的顺序遍历一个字符串或列表,2 个前进,2 个后退。 但是,由于迭代 1 和迭代 3 中对 for 循环的范围限制,我无法获得最终的 char 或列表元素。 代码如下:

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])

这是输出:

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 和 Iter 3 都到达字符串的末尾? 谢谢

【问题讨论】:

    标签: python python-3.x loops for-loop iteration


    【解决方案1】:
    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())
    

    【讨论】:

    • 感谢 Ilya Rusin,我测试了这段代码,但是迭代并没有通过从它们的位置到结束的所有字符串。不过我会查看关于集合双端队列的教程。
    • 我写这个例子很快,它需要一些更正。如果我能找到更优雅的方法来解决这个问题,我会编辑这篇文章。
    【解决方案2】:

    已经给出了模块collections的有效答案,这是一个没有import的答案。

    考虑到输入字符串长度的限制,基本上先计算你的索引,并在到达末尾时回绕,例如:

    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])
    

    输出:

    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
    

    【讨论】:

    • 谢谢,Edwin,这正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多