我有一个对象列表,我希望得到一个对象列表列表,使用另一个列表中的对象进行拆分,如下所示:
l = ['x',1,2,3,'a',5,6,1,7]
和另一个对象列表
s = ['a', 1, 4]
我希望得到结果:
[ ['x'], [1, 2, 3], ['a', 5, 6], [1, 7] ]
有没有好的/ pythonic方式呢?
编辑:
我希望每个结果列表的头部都是s
的元素,并且所有这些列表都保持初始列表的元素的顺序相同。
答案 0 :(得分:5)
一个发电机可以为你做到这一点:
def split_on_members(seq, s):
s = set(s)
chunk = []
for i in seq:
if i in s and chunk:
yield chunk
chunk = []
chunk.append(i)
if chunk:
yield chunk
给出:
>>> list(split_on_members(l, s))
[['x'], [1, 2, 3], ['a', 5, 6], [1, 7]]
您可以在不创建完整列表的情况下循环生成器:
>>> for group in split_on_members(l, s):
... print group
...
['x']
[1, 2, 3]
['a', 5, 6]
[1, 7]
答案 1 :(得分:2)
尝试这两个功能,
'return'类型
def overlap_split_list(l,s):
l1 = []
l2 = []
for i in l:
if i in s:
l1.append(l2)
l2 = []
l2.append(i)
if l2: l1.append(l2)
return l1
生成器类型
def generator_overlap_split_list(l,s):
l2 = []
for i in l:
if i in s:
yield l2
l2 = []
l2.append(i)
if l2: yield l2
输出(全部相同)
print overlap_split_list(l,s)
print [i for i in generator_overlap_split_list(l,s)]
print list(generator_overlap_split_list(l,s))