我在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'....]
我需要以某种方式处理列表,以便返回P
和N
的单个序列。在上面的例子中,我需要返回:
[['P'],['N','P','N'],['N','P'],['N'],['P','N'].....]
我看过itertools
,但没有发现任何可以做到这一点的事情。我有很多列表要以这种方式处理,因此效率也很重要。
答案 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']]