从 python 列表中提取序列

extract sequences from python list

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

我需要以某种方式处理列表,以便 return PN 的单独序列。在上述情况下,我需要 return:

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

我查看了 itertools 但没有找到任何可以做到这一点的东西。我有很多列表要用这种方式处理,所以效率也很重要。

您可以使用 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 的组。

    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']]