python - 如何根据值将列表拆分为子列表?
问题描述
我得到一个像这样的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']
我想避免为此编写多个循环(甚至可以在没有循环的情况下完成),但我没有一种优雅的方式来做到这一点。
你们能帮帮我吗?
解决方案
您可以使用内置的条件(例如条目是数字)进行分组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']
推荐阅读
- java - 没有签名文件条目的清单部分 org/bouncycastle/mail/smime/SMIMEEnvelopedGenerator$EnvelopedGenerator.class
- angular - 写在 fixture.whenStable().then 中的所有预期条件都填充为 SPEC HAS NO EXPECTATIONS
- python - pyenv-virtualenv python 版本在 env 激活时不会改变
- android - Android studio 如何修复 android failed 链接失败
- javascript - 下载、打开和删除文件按钮不可见
- android - 如何获得正确的链接格式?
- amazon-web-services - 有什么方法可以从 GitHub Action 部署到 AWS EKS 私有集群?
- javascript - 使用 Jest 和 Cypress 时出错
- android - 在 Android 上捕获“BOOT_COMPLETED”时如何使用 SharedPrefs?
- scikit-learn - 管道和网格搜索 - 管道完全重新计算?