Python 如何在出现字符时将列表中的元素拆分为不同的子列表

Python 如何在出现字符时将列表中的元素拆分为不同的子列表,python,python-3.x,list,Python,Python 3.x,List,我想在列表中出现特定字符时拆分列表。 比如说 lst=[“abc”、“def”、“ghi”、“jkl”、“jkl”] 到 lst2=[[“abc”,“def”],[“ghi”,“jkl”]] 到目前为止,我已经尝试过使用itertools,也尝试过使用更多的itertools,但都没有用 有没有一种更有效、更简单的方法来实现这一点?正如@mkrieger1所指出的,itertools.groupby应该是您的首选武器: from itertools import groupby lst = [

我想在列表中出现特定字符时拆分列表。 比如说

lst=[“abc”、“def”、“ghi”、“jkl”、“jkl”]

lst2=[[“abc”,“def”],[“ghi”,“jkl”]]

到目前为止,我已经尝试过使用
itertools
,也尝试过使用
更多的itertools
,但都没有用


有没有一种更有效、更简单的方法来实现这一点?

正如@mkrieger1所指出的,
itertools.groupby
应该是您的首选武器:

from itertools import groupby

lst = ["abc", "def", "..", "ghi", "jkl", ".."]

print([list(group) for key, group in groupby(lst, key=lambda s: s != "..") if key])
输出:

[['abc', 'def'], ['ghi', 'jkl']]
>>> 
True ['abc', 'def']
False ['..']
True ['ghi', 'jkl']
False ['..']
>>> 
这里有一个解释:
itertools.groupby
创建一个迭代器,它生成键和组的元组。此上下文中的“键”指的是类似于“组类别”的对象,而此上下文中的“组”是属于同一组的连续元素的迭代器。默认情况下,该键仅比较项目的等效性-如果它们相同,则它们属于同一组。我们可以使用自定义键覆盖此行为,自定义键是一个可调用对象(lambda、函数等),它将一个项作为参数并返回一个“group category”对象,表示一个不同的组:

from itertools import groupby

lst = ["abc", "def", "..", "ghi", "jkl", ".."]

def key(string):
    return string != ".."

for key, group in groupby(lst, key=key):
    print(key, list(group))
输出:

[['abc', 'def'], ['ghi', 'jkl']]
>>> 
True ['abc', 'def']
False ['..']
True ['ghi', 'jkl']
False ['..']
>>> 

在本例中,我们的键是布尔值。根据可调用的
的结果对项目进行分组,该键的作用类似于谓词。谓词为
True
的所有相邻对象被分组在一起,谓词为
False
的所有相邻对象被分组在一起。因为我们只对谓词为
True
的组感兴趣,所以我在列表理解中使用了可选的过滤语法来只保留这些组。

itertools有什么问题?看起来使用itertools.groupby应该是个好主意。谢谢@Paul M。这很管用。你能给我解释一下吗?谢谢again@TheWitcher当然,我已经编辑了我的文章并做了解释。