根据python中的值对列表进行Sperate
我的清单如下:-根据python中的值对列表进行Sperate,python,list,split,Python,List,Split,我的清单如下:- list1 = ['box','ball','new','bat','chess','old'] 我想根据值拆分此列表。在上面的列表中,我想将'new'之前的值插入新列表,而'old'之前的值必须插入新列表。'new'和'old'之前的值可以是一个或多个,但这里有两个值。我尝试在之后使用split\u,但得到以下结果:- from more_itertools import split_after list1 = ['box','ball','new','bat','che
list1 = ['box','ball','new','bat','chess','old']
我想根据值拆分此列表。在上面的列表中,我想将'new'
之前的值插入新列表,而'old'
之前的值必须插入新列表。'new'
和'old'
之前的值可以是一个或多个,但这里有两个值。我尝试在之后使用split\u,但得到以下结果:-
from more_itertools import split_after
list1 = ['box','ball','new','bat','chess','old']
list(split_after(list1, lambda x: x == "new"))
结果:-
[['box', 'ball', 'new'], ['bat', 'chess', 'old']]
但渴望产出:-
result1 = ['box', 'ball']
result2 = ['bat', 'chess']
您可以使用,并在lambda中检查new
或old
然后从结果中删除空列表
from more_itertools import split_at
list1 = ['box', 'ball', 'new', 'bat', 'chess', 'old']
print(list(filter(None, split_at(list1, lambda x: x == "new" or x == "old"))))
输出
[['box', 'ball'], ['bat', 'chess']]
另一种解决方案,使用标准的itertools.groupby
:
list1=[“盒子”、“球”、“新的”、“球棒”、“国际象棋”、“旧的”]
从itertools导入groupby
out=[
如果不是v,则在groupby(list1,{“new”,“old”}中的lambda k:k)中为v列出(g)
]
打印(输出)
印刷品:
[['box','ball',['bat','chess']]
如果这些值更多地基于您必须拆分的值,如新的和旧的,您可以执行以下操作:
list1 = ['box','ball','new','bat','chess','old']
split_val = ['new','old'] # Based on these values you can separate list. You can add more values here.
new_list=[]
k=0
for i in split_val:
for j in range(len(list1)):
if list1[j]==i and j!=0:
new_list.append(list1[k:j])
k=j+1
new_list.append(list1[k:])
new_list = [i for i in new_list if len(i)>0]
print(new_list)
输出:
[['box', 'ball'], ['bat', 'chess']]
只需从每个列表中删除最后一项?是的,您已经解决了问题,只需弹出每个列表的最后一个值。