【发布时间】:2015-03-04 23:35:48
【问题描述】:
如果我有一个字符串
String = 'ABCEEFGH'
如何在不超出索引的情况下检查每个字母旁边的字母?
for index in range(len(String)):
if String[index] == String[index+1]:
print('Double')
【问题讨论】:
标签: python string python-3.x indexing
如果我有一个字符串
String = 'ABCEEFGH'
如何在不超出索引的情况下检查每个字母旁边的字母?
for index in range(len(String)):
if String[index] == String[index+1]:
print('Double')
【问题讨论】:
标签: python string python-3.x indexing
您可以使用enumerate、slicing 直到倒数第二个字符的字符串:
String = 'ABCEEFGH'
for ind,ch in enumerate(String[:-1]):
if ch == String[ind+1]:
print('Double')
在您自己的代码中,逻辑将是相同的len(String)-1,但枚举是要走的路:
for index in range(len(String)-1):
if String[index] == String[index+1]:
print('Double')
您看到的只是想检查任何两个相邻字符是否相同,也许最好使用any:
String = 'ABCEEFGH'
if any( ch == String[ind+1] for ind, ch in enumerate(String[:-1])):
print('Double',ch)
any 将短路并在条件为True 时立即中断循环,否则如果我们没有匹配项,则评估为False。
【讨论】:
[-1] 正在索引,获取最后一个字符,[:-1] 正在切片
>>> text = 'ABCEEFGH'
>>> for c1, c2 in zip(text, text[1:]):
if c1 == c2:
print 'double'
double
【讨论】:
如果您考虑与上一个字母而不是下一个字母进行比较,这类问题几乎总是更容易。记住你已经看过的字母比向前看要容易得多。
text = 'ABCEEFGH'
prev = ''
for letter in text:
if letter == prev:
print("letter duplicated:", letter)
prev = letter
【讨论】:
你可以使用正则表达式:
for match in re.findall(r'([a-z])\1', your_string):
print('Double letters found here.')
【讨论】: