首页 > 解决方案 > 根据条件从列表创建列表列表

问题描述

我有一个字符串列表,我试图根据特定字符出现在列表中的时间将其转换为列表列表。下面是一个例子:

我从以下列表开始:

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) 范围内拆分。我已经做了几个小时了,我不知道如何动态地做到这一点。网上也找不到解决办法。我想知道是否有人可以帮助我解决这个问题。或许我的方法从一开始就不是最理想的。

标签: pythonlist

解决方案


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)])

推荐阅读