如何在Python中简洁合并列表每三个(或更多)元素?
Python列表按指定数量合并元素的简洁实现
针对每3个元素合并的简洁写法
注意不要用list作为变量名(会覆盖内置类型),改用lst。可以用列表推导式+切片+字符串拼接一步实现需求:
lst = [1, 'one', 'first', 2, 'two', 'second', 3, 'three', 'third', 4, 'four', 'fourth', 5, 'five', 'fifth', 6, 'six', 'sixth'] result = [''.join(map(str, lst[i:i+3])) for i in range(0, len(lst), 3)] print(result) # 输出: ['1onefirst', '2twosecond', '3threethird', '4fourfourth', '5fivefifth', '6sixsixth']
代码逻辑说明:
range(0, len(lst), 3)生成步长为3的索引序列(0、3、6...),定位每组起始位置lst[i:i+3]截取从索引i开始的3个元素作为一组map(str, ...)把组内整数转成字符串,确保所有元素可参与字符串拼接''.join(...)把组内元素拼接成单个字符串,最终通过列表推导式生成结果列表
通用实现:按任意数量n合并元素
如果需要支持每n个元素合并(n为任意正整数),可以封装成通用函数,还能自定义合并规则:
def merge_elements(lst, group_size, merge_func=''.join): """ 按指定大小分组合并列表元素 :param lst: 原列表 :param group_size: 每组元素个数 :param merge_func: 合并函数,默认是字符串拼接,可传入自定义函数 :return: 合并后的新列表 """ return [merge_func(map(str, lst[i:i+group_size])) for i in range(0, len(lst), group_size)] # 示例1:每3个元素拼接成字符串 lst = [1, 'one', 'first', 2, 'two', 'second', 3, 'three', 'third', 4, 'four', 'fourth', 5, 'five', 'fifth', 6, 'six', 'sixth'] result = merge_elements(lst, 3) print(result) # 示例2:每4个元素用逗号连接 result_comma = merge_elements(lst[:16], 4, merge_func=lambda x: ','.join(x)) print(result_comma) # 输出: ['1,one,first,2', 'two,second,3,three', 'third,4,four,fourth', '5,five,fifth,6'] # 示例3:处理元素个数不是group_size整数倍的情况 short_lst = [1, 'a', 2, 'b', 3] result_short = merge_elements(short_lst, 2) print(result_short) # 输出: ['1a', '2b', '3']
这个通用函数的灵活性在于:
- 支持任意分组大小
group_size - 可通过
merge_func自定义合并逻辑,比如用逗号分隔、数字求和等 - 自动处理列表长度不能被
group_size整除的情况,最后一组保留剩余元素
内容的提问来源于stack exchange,提问作者Константин Прудников
相关产品推荐
相关产品推荐

