使用分隔符从列表生成Python子列表
我有一个这样的列表:
['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|']
我想把它用“|”这个符号分开,结果应该是这样的:
[[u'MOM', u'DAD'],[ u'GRAND'], [u'MOM', u'MAX', u'JULES']]
我该怎么做呢?我在网上只找到需要元素长度的子列表的例子。
4 个回答
1
这里有一个简单的解决方案,使用的是传统的for循环(不过,关于groupby的解决方案更好哦!)
seq = ['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|']
S=[]
tmp=[]
for i in seq:
if i == '|':
S.append(tmp)
tmp = []
else:
tmp.append(i)
# Remove empty lists
while True:
try:
S.remove([])
except ValueError:
break
print S
结果是
[[u'MOM', u'DAD'], [u'GRAND'], [u'MOM', u'MAX', u'JULES']]
10
itertools.groupby()
这个功能做得非常好...
>>> import itertools
>>> l = ['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|']
>>> key = lambda sep: sep == '|'
>>> [list(group) for is_key, group in itertools.groupby(l, key) if not is_key]
[[u'MOM', u'DAD'], [u'GRAND'], [u'MOM', u'MAX', u'JULES']]
15
>>> [list(x[1]) for x in itertools.groupby(['|', u'MOM', u'DAD', '|', u'GRAND', '|', u'MOM', u'MAX', u'JULES', '|'], lambda x: x=='|') if not x[0]]
[[u'MOM', u'DAD'], [u'GRAND'], [u'MOM', u'MAX', u'JULES']]
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。