Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
根据python中的值对列表进行Sperate_Python_List_Split - Fatal编程技术网

根据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']]

只需从每个列表中删除最后一项?是的,您已经解决了问题,只需弹出每个列表的最后一个值。