与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