python - 如何根据列表项打破列表并创建相关字符串
问题描述
我有一个类似于以下的列表:
['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
我想打破(拆分)并存储基于'\ n'的列表信息。这意味着我想从上面的列表中创建以下字符串:
string1='2019, Melbourne, region1, suburb1'
string2='2018, region1, Melbourne'
我知道如何使用简单的 for 循环并围绕索引进行操作,但我想知道是否有人可以帮助我以更专业的方式完成上述任务。因为玩弄索引会使我的代码有点复杂和不可读。
解决方案
You can get a list of the desired strings, using itertools.groupby
with an appropriate key function to chunk the list and str.join
to turn the chunks into strings:
from itertools import groupby
l = ['2019','Melbourne','region1','suburb1','\n', '2018','region1','Melbourne','\n']
[', '.join(g) for k, g in groupby(l, key=lambda s: s != '\n') if k]
# ['2019, Melbourne, region1, suburb1', '2018, region1, Melbourne']
Note that groupby
returns a lazy iterator producing equally lazy groups. So this does not build any unnecessary intermediate in-memory lists.
推荐阅读
- python - 熊猫字典到 DataFrame
- hyperledger-fabric - 想要将用 golang 编写的链代码部署到 aws 云
- python-3.x - 可以多次运行同一个模型吗?
- c# - C#:在创建时评估参数的 lambda,而不是在执行时
- swift - 使用 Apple Instruments 调试高内存分配
- python - 如何在python中的if语句中调用具有返回值的函数
- reactjs - 钩子内的状态第一次在表单提交时没有更新
- javascript - Saga 为常数
- light-inject - InvalidOperationException:尝试在没有当前范围的情况下创建一次性实例 - 使用 .NET Core 3.0 的 LightInject
- java - 选择的文件路径不是文件