从 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 P
和 N
的单独序列。在上述情况下,我需要 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']]
我在 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 P
和 N
的单独序列。在上述情况下,我需要 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']]