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)
但是这会返回相同的列表,我期望它在第一个'******'
断点处打破循环.在'******'
分隔符之后,我正在努力将列表的每个部分分开.
我很感激我能得到任何帮助.
我能想到的最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)
归档时间: |
|
查看次数: |
146 次 |
最近记录: |