与Python中的数组[i+;+;i]和数组[i+;+;]的代码类似? 在C++中,也可以在for循环中改变索引(例如,代码>代码< >代码>)。例如,这有助于比较当前元素,并基于该比较比较比较下一个元素: for(int i = 0; i < end; i++) if(array[i] == ':') if(array[++i] == ')') smileyDetected = true;

与Python中的数组[i+;+;i]和数组[i+;+;]的代码类似? 在C++中,也可以在for循环中改变索引(例如,代码>代码< >代码>)。例如,这有助于比较当前元素,并基于该比较比较比较下一个元素: for(int i = 0; i < end; i++) if(array[i] == ':') if(array[++i] == ')') smileyDetected = true;,python,c++,c,Python,C++,C,我的意思是,这是关于索引的递增,而不是查找特定字符串。也许: smileyDetected = ':)' in "".join(array) 或者按照@jornsharpe: from itertools import tee # pairwise() from "Itertools Recipes" def pairwise(iterable): "s -> (s0,s1), (s1,s2), (s2, s3), ..." a, b = tee(iterable)

我的意思是,这是关于索引的递增,而不是查找特定字符串。

也许:

smileyDetected = ':)' in "".join(array)
或者按照@jornsharpe:

from itertools import tee

# pairwise() from "Itertools Recipes"

def pairwise(iterable):
    "s -> (s0,s1), (s1,s2), (s2, s3), ..."
    a, b = tee(iterable)
    next(b, None)
    return zip(a, b)

for a, b in pairwise(array):
    if a == ':' and b == ')':
         smileyDetected = True

在这种特殊情况下,您可以执行以下操作:

for i, char in enumerate(array[:-1]):
    if char == ":" and array[i+1] == ")":
        smiley_detected = True
但是,在更一般的情况下,如果需要跳过元素,可以修改原始迭代器:

iterator = iter(array)
for char in iterator:
    if char == ":" and next(iterator) == ")":
        smiley_detected = True

这里您需要更加注意数组边界;如果最后一个元素是
,则在耗尽的迭代器上调用
next
时会出现
StopIteration
异常。你需要抓住它。

如果
array
是一个字符串,那么最短的Python版本显然是:

数组中检测到的smileyDetected=':)' 一种更通用/非字符串特定的方法是使用迭代器:

smileyDetected=(“:”,“)”)在zip中(数组,数组[1:])

为什么不以两个字符对迭代字符串?如果数组不是C字符串且“:”是最后一个字符,C/C++将显示未定义的行为。如果
array
是字符串,您可以在数组中编写
smiley_detected=”:)”
。像这样简化(非pythonic方式和langauge不可知),而我end小于
array
;)的最后一个索引,则不检查@jornsharpe我想查找笑脸后面的内容,而不是笑脸是否在那里。第一个问题是
array=['foo:',')bar']
请不要
导入*
@ValentinLorentz您的示例与OP的示例代码不匹配,但我的第一个解决方案实际上处理得很正确。最好作为jonrsharpe的成对逗号到OP的后续注释发布。@cdlane哦,对不起,我误解了这个问题(我认为它是字符串数组而不是字符数组)第二个错误用于
数组=['a',':','),'b']
,因为它调用next()每个循环在同一迭代器上调用两次。@ValentinLorentz否,当当前元素为
时,它只调用next两次,因为
运算符短路。对于给定的搜索模式,这是行得通的,因为它不能以
开头,因此跳过
并不重要。
for i, char in enumerate(array[:-1]):
    if char == ":" and array[i+1] == ")":
        smiley_detected = True
iterator = iter(array)
for char in iterator:
    if char == ":" and next(iterator) == ")":
        smiley_detected = True