我有一个简单的for循环遍历用户输入字符串。如果它遇到某个值,我希望能够向前看下一个值,以确定下一步该做什么。做到这一点的最佳方法是什么?例如,在下面的代码中,如果在字符串中遇到“ 1”,则应查看字符串中的下一个字符。如果它也是1,则打印1。否则不执行任何操作。
UserInput = input("Enter calculator expression:")
for x in UserInput:
...
...
if x == 1:
# if the next value in the string is 1:
# print 1
# else:
# do nothing
答案 0 :(得分:2)
在循环中使用range和len获取位置地址
UserInput = input("Enter calculator expression")
for i in range(len(UserInput)-1):
if x[i]=='1':
if x[i+1]=='1':
print "something"
else:
pass
答案 1 :(得分:2)
您可以自己压缩一个字符串,但是可以用一个切片偏移。
>>> from itertools import zip_longest
>>> the_input = 'foobar' # example
>>> the_input[1:] # slice off the first character
'oobar'
>>> for c, lookahead in zip_longest(the_input, the_input[1:]):
... print(c, lookahead)
...
f o
o o
o b
b a
a r
r None
与使用像C这样的语言那样使用索引相比,这更像Python。 拉链将元素按元素配对,例如拉链的牙齿。
答案 2 :(得分:1)
您可以使用enumerate()函数。 像这样的东西
#!/user/bin/python3
for i,x in enumerate(UserInput):
if x=='1':
if UserInput[i+1] == '1':
print('1')
答案 3 :(得分:1)
首先,python约定为蛇形(改为user_input)
下面的代码是我的解决方法
from itertools import islice
def window(seq, n=2):
it = iter(seq)
result = tuple(islice(it, n))
if len(result) == n:
yield result
for elem in it:
result = result[1:] + (elem,)
yield result
pair = list(window(user_input))
comparison_list = ["1"]
result = [x for x,y in pair if x in comparison_list and x == y]
答案 4 :(得分:1)
您不需要向前看。至少在解决此类问题时,这不是我们通常要做的。相反,您应该向后看-通过存储信息。以下示例将信息存储在变量state
中,您可以决定后续迭代中的下一个动作。
UserInput = input("Enter calculator expression:")
state = '0'
for x in UserInput:
if x == '1':
if state == '1':
print('1')
else:
state = '1'
else:
state = '0'
答案 5 :(得分:1)
通过zip函数执行此操作的另一种方式(可能是更多的pythonic方式):
for char, next_char in zip(UserInput, UserInput[1:]):
if char == "1" and char == next_char:
print(1)
答案 6 :(得分:1)
prev_char = None
for char in input("Enter calculator expression:"):
pass # Here you can check the current character and the previous character
if 1 == prev_char and 1 == char:
print(1)
prev_char = char