从python列表中提取序列

ERS*_*ERS -2 python sequences list sequence

我在python中有一个列表,如下所示:

['x','x','x','x','P','x','x','N','P','N','x','x','x','N','P','x','x,'x,','x','x','x','N','x,'x','P','N','x','x','x'....]
Run Code Online (Sandbox Code Playgroud)

我需要处理在某些方面,这样我恢复的单独序列列表PN.在上面的例子中我需要返回:

[['P'],['N','P','N'],['N','P'],['N'],['P','N'].....]
Run Code Online (Sandbox Code Playgroud)

我看过itertools但没有发现任何能做到这一点的事情.我有很多列表要以这种方式处理,因此效率也很重要.

Thi*_*lle 5

你可以使用itertools.groupby来做到这一点:

from itertools import groupby

data = ['x','x','x','x','P','x','x','N','P','N','x','x','x','N',
        'P','x','x','x','x','x','x','N','x','x','P','N','x','x','x']

out = list(list(g) for k, g in groupby(data, lambda item: item in {'N', 'P'}) if k)

print(out)
# [['P'], ['N', 'P', 'N'], ['N', 'P'], ['N'], ['P', 'N']]
Run Code Online (Sandbox Code Playgroud)

我们按照分组item in {'N', 'P'},并且只保留这个为True的组.