如何在Python中将lst
中的元素分组到以'S'
开头的子列表中?
lst = ['S', 'one', 'two', 'S', 'three', 'S', 'four', 'five', 'six']
我想要什么:
[['S', 'one', 'two'], ['S', 'three'], ['S', 'four', 'five', 'six']]
编辑:
如果现在lst = ['"A"', 'one', 'two', '"B"', 'three', '"C"', 'four', 'five', 'six']
会怎样?前几个元素并不完全相同,但是有一些共同点,即引号。
答案 0 :(得分:3)
使用简单的迭代。
例如:
lst = ['S', 'one', 'two', 'S', 'three', 'S', 'four', 'five', 'six']
res = []
for i in lst:
if i =="S":
res.append([i])
else:
res[-1].append(i)
print(res)
输出:
[['S', 'one', 'two'], ['S', 'three'], ['S', 'four', 'five', 'six']]
问题已编辑。
使用str.startswith
和str.endswith
例如:
lst = ['"A"', 'one', 'two', '"B"', 'three', '"C"', 'four', 'five', 'six']
res = []
for i in lst:
if i.startswith('"') and i.endswith('"'):
res.append([i])
else:
res[-1].append(i)
print(res)
# --> [['"A"', 'one', 'two'], ['"B"', 'three'], ['"C"', 'four', 'five', 'six']]
答案 1 :(得分:2)
您可以使用itertools.groupby
:
>>> from itertools import groupby
>>> [['S']+list(g) for k,g in groupby(lst,lambda x:'S' in x) if not k]
[['S', 'one', 'two'], ['S', 'three'], ['S', 'four', 'five', 'six']]