从python列表中提取序列

时间:2018-04-11 08:34:10

标签: python list sequence sequences

我在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'....]

我需要以某种方式处理列表,以便返回PN的单个序列。在上面的例子中,我需要返回:

[['P'],['N','P','N'],['N','P'],['N'],['P','N'].....]

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

2 个答案:

答案 0 :(得分: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']]

我们根据item in {'N', 'P'}进行分组,并仅保留此为True的组。

答案 1 :(得分:0)

    main_list = []
    def get_desired_value(_list):
        new_list = []
        for val in _list:
            if val in ['N', 'P']:
                new_list.append(val)
            else:
                if new_list:
                    main_list.append(new_list[:])
                    new_list.clear()
        return main_list
   print(get_desired_value(data))
   >>>[['P'], ['N', 'P', 'N'], ['N', 'P'], ['N'], ['P', 'N']]