Skip to main content
 首页 » 编程设计

Python 按值将列表元素分组为元组

2025年05月04日9落叶无声

我有这个列表:

mylist = ['*', 'Drama', 'Film Noir', 'Mystery', 'Romance', '*', 'Dance', 'Drama', 'Musical', '*', 'Crime', 'Drama', '*', 'Action', 'Drama', 'Period', 'Western', '*', 'Adaptation', 'Based-on', 'Comedy', 'Romance', '*', 'Mystery', 'Thriller', '*', 'Comedy'] 

显然,元素“*”用于分隔列表中的组。如何对“*”之间出现的元素进行分组?期望的结果将如下所示:

expected_list = [('Drama', 'Film Noir', 'Mystery', 'Romance'), ('Dance', 'Drama', 'Musical'), ('Crime', 'Drama'), ('Action', 'Drama', 'Period', 'Western'), ('Adaptation', 'Based-on', 'Comedy', 'Romance'), ('Mystery', 'Thriller'), ('Comedy')] 

请您参考如下方法:

这是经典use case for itertools.groupby :

from itertools import groupby 
 
expected_list = [tuple(grp) for isstar, grp in groupby(mylist, key='*'.__eq__) if not isstar] 

将您的输入分组为 * 和 not-* 的运行,删除 * 组和 tuple 启动非 * 组。