我的问题是在列表中找到连续的'3'.例如list('133233313333').难以理解的是只有两个相邻的'3'是有效的,三个或更多相邻的'3'不是.因此'33'是有效的,但三重'3'和'3333'无效.我首先尝试了以下内容:
try:
if l[i] == '3' and l[i+1] == '3' and l[i+2] != '3' and l[i-1] != '3':
record_current(i)
except IndexError:
pass
Run Code Online (Sandbox Code Playgroud)
我的目的是忽略比较,如果存在IndexError,它就是真的,但它不起作用.
如果list有一个类似dict.get()的方法,它返回None,那么就是KeyError,我可以把它写成(l[i+2] == None or l[i+2] != '3').
如果我现在必须完成它,我会从其他项目中特别对待第一项和最后两项.但有没有办法优雅地解决这个问题?
你可以这样做itertools.groupby:
>>> from operator import itemgetter
>>> from itertools import groupby
>>> s = list('1332333133334433')
>>> for k, g in groupby(enumerate(s), itemgetter(1)):
if k == '3':
ind = next(g)[0]
if sum(1 for _ in g) == 1:
print ind
...
1
14
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |