Python:list的方法类似于dict.get()

dul*_*shi 4 python algorithm

我的问题是在列表中找到连续的'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').

如果我现在必须完成它,我会从其他项目中特别对待第一项和最后两项.但有没有办法优雅地解决这个问题?

Ash*_*ary 5

你可以这样做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)