rawinput:
lst = ['a_app','a_bla','a_cat','b','c','d_d1','d_xe','d_c','e_1','e_2','f']
元素lst是字符串
预期结果:
new_lst = [['a_app','a_bla','a_cat'],'b','c',['d_d1','d_xe','d_c'],['e_1','e_2'],'f']
任何元素包括'_'将被分组到列表元素中,但是如果不同,它们的开始将被分组到不同的列表中,例如['a_app','a_bla','a_cat'], ['d_d1','d_xe','d_c'].
注意:新列表的顺序不会仅将包含"_"的压缩字符串更改为列表.
你可以使用itertools.groupby:
>>> from itertools import groupby
>>> lst = ['a_app','a_bla','a_cat','b','c','d_d1','d_xe','d_c','e_1','e_2','f']
>>> [list(strs) for _,strs in groupby(lst, lambda s: s.split('_')[0])]
[['a_app', 'a_bla', 'a_cat'], ['b'], ['c'], ['d_d1', 'd_xe', 'd_c'], ['e_1', 'e_2'], ['f']]
Run Code Online (Sandbox Code Playgroud)
既然你编写了一些代码,这里有一种将1元素子列表转换为字符串的方法:
>>> new_list = [list(strs) for _,strs in groupby(lst, lambda s: s.split('_')[0])]
>>> [strs if len(strs) > 1 else strs[0] for strs in new_list]
[['a_app', 'a_bla', 'a_cat'], 'b', 'c', ['d_d1', 'd_xe', 'd_c'], ['e_1', 'e_2'], 'f']
Run Code Online (Sandbox Code Playgroud)
但是,使用列表列表可能比使用混合类型(列表和字符串)的列表更容易.
| 归档时间: |
|
| 查看次数: |
33 次 |
| 最近记录: |