在python的循环循环中向后和向前看

时间:2016-08-19 13:30:57

标签: python list iteration

我想基于用户输入生成单个数字列表。以循环迭代的方式,列表应包含用户输入,之前的两位数字以及之后的两位数字。数字的顺序并不重要。

user_input =" 1" 输出= [9,0,1,2,3]

user_input =" 9" 输出= [7,8,9,0,1]

使用itertools.cycle我能够获得接下来的两位数,但我找不到可以帮助我获得前两位数的答案。是否有一种简单的方法可以获得前两位数字?

from itertools import cycle
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

user_input = "139"

for i in user_input:    
    s = int(i)
    lst = [s]
    itr = cycle(numbers)
    if s in itr:
        #how can I get the two digits before s?
        lst.append(next(itr))   #getting the next digit
        lst.append(next(itr))

    print(lst)

4 个答案:

答案 0 :(得分:2)

你可以这样实现。

{{1}}

<强>执行

{{1}}

答案 1 :(得分:1)

可以使用列表推导和% 10

>>> for s in range(10):
        print([i % 10 for i in range(s-2, s+3)])

[8, 9, 0, 1, 2]
[9, 0, 1, 2, 3]
[0, 1, 2, 3, 4]
[1, 2, 3, 4, 5]
[2, 3, 4, 5, 6]
[3, 4, 5, 6, 7]
[4, 5, 6, 7, 8]
[5, 6, 7, 8, 9]
[6, 7, 8, 9, 0]
[7, 8, 9, 0, 1]

答案 2 :(得分:0)

将iff中的语句修改为:

if s in itr and len(str) == 2:
    lst.append(next(itr))   #getting the next digit
    lst = [s - 1] + lst # prepend the first value
    lst.append(next(itr))
    lst = [s - 2] + lst # prepend the second value

或者你也可以

if s in itr and len(str) == 2:
    lst.append(next(itr))   #getting the next digit
    lst.insert(0, s-1) # prepend the first value
    lst.append(next(itr))
    lst.insert(0, s-2) # prepend the second value

答案 3 :(得分:0)

您可以从输入中获取范围并使用该范围来切割numpy数组

编辑:我编写代码而不是测试代码不好...感谢@Stefan Pochmann指出...

import numpy as np

def cycle(x):  #x is user input
    indices = np.array(range(x-2, x+3))%10
    numbers = np.array(range(10))
    return numbers[indices]