如何根据Python中的条件/断点从另一个列表中创建多个列表?

roo*_*tpl 4 python list python-3.x

我正在寻找一种从一个大型列表创建多个列表的方法.

我想要做的是从列表中过滤掉不同的数字组(每周销售的水果数量).每组数字在点击'******'字符串时应该在一个单独的列表中,该字符串指示每个组应该结束的位置.

Example list:

['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这个:

list = []
for i in mainList:
        if i.isdigit():
            list.append(i)
    print(list)
Run Code Online (Sandbox Code Playgroud)

但是,我的代码在一个列表中打印所有内容:

#Ouput = ['1000', '2000', '2500', '5000', '150'] 
Run Code Online (Sandbox Code Playgroud)

如何将输出分成单独的列表,以便每个水果组打印在一个单独的"块"中,所有这些都是更大列表的一部分?

我正在寻找的结果应该是这样的:

[['1000', '2000', '2500'], ['5000', '150']]
Run Code Online (Sandbox Code Playgroud)

到目前为止,我试过这个:

for i in mainList:
   if '******' in i:
       break
   if i != '******':
       result.append(i)
Run Code Online (Sandbox Code Playgroud)

但是这会返回相同的列表,我期望它在第一个'******'断点处打破循环.在'******'分隔符之后,我正在努力将列表的每个部分分开.

我很感激我能得到任何帮助.

Dan*_*ejo 6

我能想到的最pythonic方式是使用itertools.groupby:

from itertools import  groupby

lst = ['apples', '1000', '2000', '2500', '******', 'oranges', '5000', '150', '******']

result = [list(group) for k, group in  groupby(lst, key=str.isdigit) if k]
print(result)
Run Code Online (Sandbox Code Playgroud)

产量

[['1000', '2000', '2500'], ['5000', '150']]
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以使用for循环:

result = []
start = True
for element in lst:
    if start and element.isdigit():  # start group
        result.append([element])
        start = False
    elif element.isdigit():  # just append to current group
        result[-1].append(element)
    else:  # close group
        start = True

print(result)
Run Code Online (Sandbox Code Playgroud)

产量

[['1000', '2000', '2500'], ['5000', '150']]
Run Code Online (Sandbox Code Playgroud)