我想基于用户输入生成单个数字列表。以循环迭代的方式,列表应包含用户输入,之前的两位数字以及之后的两位数字。数字的顺序并不重要。
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)
答案 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]