首页 > 解决方案 > 如何根据值将列表拆分为子列表?

问题描述

我得到一个像这样的python列表:

['#main', '89631139', '22804410', '38517737', '#extra', '43228023', '56532353', '!side', '22804410', '45467446', '31801517', '63767246']

我正在寻找一种有效的方法来根据拆分器的值将这个列表分隔在子列表:“#main”、“#extra”和“!side”。我还需要排除那些拆分器。

在这里,输出应该是:

main = ['89631139', '22804410', '38517737']
extra = ['43228023', '56532353']
side = ['22804410', '45467446', '31801517', '63767246']

我想避免为此编写多个循环(甚至可以在没有循环的情况下完成),但我没有一种优雅的方式来做到这一点。

你们能帮帮我吗?

标签: python

解决方案


您可以使用内置的条件(例如条目是数字)进行分组itertools.groupby

import itertools

original = ['#main', '89631139', '22804410', '38517737', '#extra', '43228023', '56532353', '!side', '22804410', '45467446', '31801517', '63767246']

# since it provides the three lists and you know that ahead of time, you can unpack into each

main, extra, side = [list(g) for m, g in itertools.groupby(original, key=lambda x: x.isnumeric()) if m]

然后分配每个列表,结果:

In [22]: main
Out[22]: ['89631139', '22804410', '38517737']

In [23]: extra
Out[23]: ['43228023', '56532353']

In [24]: side
Out[24]: ['22804410', '45467446', '31801517', '63767246']

推荐阅读