[英]Comparable code to array[++i] and array[i++] in Python?
在C和C ++中,可以在for循环中更改索引(例如i
)。 例如,这可以用于比较当前元素并基于该比较比较下一个元素:
for(int i = 0; i < end; i++)
if(array[i] == ':')
if(array[++i] == ')')
smileyDetected = true;
现在我知道这不能用Python完成(出于各种 原因 )。 但是,我不禁想知道Python是否有简短的替代方案? 我能说出来:
while i < end:
if array[i] == ':':
i += 1
if array[i] == ')':
smileyDetected = True;
然而,这花了我一个额外的线,这听起来不是那么糟糕,直到你多次这样做('可读性较低'并不意味着有一个长文件)。 所以要把它放在一行中,我会想到像array[i += 1]
这样的东西,但这似乎是无效的语法。
是否有Python等效,它在读取增量索引的同一行中增加索引?
编辑:
由于大多数答案提到使用in
来查找子字符串,作为特定示例的替代,让我添加另一个不能以这种方式解决的示例:
j = 0;
for(int i = 0; i < end; i++)
if(array[i] == ':')
if(array[++i] == ')')
anotherArray[j++] = array[++i];
我的意思是它是关于索引的增量,而不是特定字符串的查找。
也许:
smileyDetected = ':)' in "".join(array)
或者@jonrsharpe:
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
如果array
是一个字符串,那么最短的pythonic版本显然是:
smileyDetected = ':)' in array
更通用/非字符串特定的方法是使用迭代器:
smileyDetected = (':', ')') in zip(array, array[1:])
在这种特殊情况下,您可以:
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
异常。 你需要抓住它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.