python - 根据条件从列表创建列表列表
问题描述
我有一个字符串列表,我试图根据特定字符出现在列表中的时间将其转换为列表列表。下面是一个例子:
我从以下列表开始:
lst = ['ab', 'c1', 'cd', 'd2', 'a1', 'b1', 'c1', 'ax', 'by', 'cz', 'dzz']
我想转换lst
成一个列表列表,其中每个列表开始的地方有一个以“a”开头的字符串,并在下一个以“a”开头的字符串之前结束一个元素。结果应如下所示:
new_lst = [['ab', 'c1', 'cd', 'd2'], ['a1', 'b1', 'c1'], ['ax', 'by', 'cz', 'dzz']]
我尝试的是查找以“a”开头的所有元素的索引,我使用以下代码进行操作indices = [idx for idx, x in enumerate(lst) if x.startswith('a')]
。这让我找到了符合该标准的每个字符串的位置。这产生了[0, 4, 7]
然后我研究了使用从索引创建的范围来拆分列表。因此,在 (0,3)、(4,6) 和 (7,10) 范围内拆分。我已经做了几个小时了,我不知道如何动态地做到这一点。网上也找不到解决办法。我想知道是否有人可以帮助我解决这个问题。或许我的方法从一开始就不是最理想的。
解决方案
import numpy as np
lst = ["ab", "c1", "cd", "d2", "a1", "b1", "c1", "ax", "by", "cz", "dzz"]
indices = [idx for idx, x in enumerate(lst) if x.startswith("a")]
print([each_split.tolist() for each_split in np.split(lst, indices) if len(each_split)])
推荐阅读
- android - 如何使用 Volley 在列表视图中显示图像?
- python - 对 Cloudera Manager ApiResource 使用加密密码而不是明文密码
- intellij-idea - 将 chromedriver 设置为在 IntelliJ 内的 Geb 测试中使用的默认值
- python - DREAM - 神经网络不收敛 - 上下损失
- python - pyenv 卸载是否会删除通过 pip 安装的所有软件包?
- android - 在哪里添加菜单以在所有活动中工作
- c++ - 下面的打印树功能为什么不起作用?
- c# - 在 if 子句中验证空查询
- javascript - Javascript如何通过多个分隔符拆分字符串并将它们包含在结果中
- javascript - 如何将模块的所有内容包含在不同的模块中(在 Electron JS 中)