首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于4个指标的同时迭代

基于4个指标的同时迭代
EN

Stack Overflow用户
提问于 2018-02-06 22:35:14
回答 2查看 47关注 0票数 3

我写了一段代码,通过多个索引以逆序迭代字符串或列表,其中2个向前,2个向后。但是,由于在迭代1和迭代3中给出的for循环的范围限制,我无法获得最终的char或list元素。代码如下:

代码语言:javascript
复制
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])

下面是输出:

代码语言:javascript
复制
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都到达字符串的末尾?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-02-06 23:02:09

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

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

代码语言:javascript
复制
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])

输出:

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2018-02-06 22:52:55

代码语言:javascript
复制
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())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48645464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档