首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将类似项目打包到列表中

将类似项目打包到列表中
EN

Stack Overflow用户
提问于 2020-02-01 13:05:14
回答 2查看 154关注 0票数 1

我正在学习算法,有一个问题:

给出一个整数数组,将连续的元素打包到子列表中。

例如,给定列表4、4、1、6、6、6、1、1、1、1,返回[4、4、1、6、6、6、1、1、1、1]。

注意:如果列表中只有一个事件,那么它仍然应该在它自己的子列表中。

我创建了以下解决方案:

代码语言:javascript
复制
def solve(nums):
    packed = []
    lastElement = nums[0]
    currPack = []
    for i, num in enumerate(nums):
        newPack = []
        if lastElement == num:
            currPack.append(num)
        else:
            newPack.append(num)
            packed.append(currPack)
            currPack = newPack
            
        lastElement = num
    
    packed.append(currPack)
    return packed

 nums = [4,4,1,6,6,6,1,1,1,1]
 solve(nums)
 # [[4,4], [1], [6,6,6], [1,1,1,1]]

它正在工作,但正如你所看到的,它不是很干净。我怎样才能改善这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-01 13:11:52

你可以试试itertools.groupby

代码语言:javascript
复制
>>> from itertools import groupby
>>> x = [4, 4, 1, 6, 6, 6, 1, 1, 1, 1]
>>> new_list = [list(group) for _, group in groupby(x)]
>>> new_list
[[4, 4], [1], [6, 6, 6], [1, 1, 1, 1]]
>>>

另一种方式是:

代码语言:javascript
复制
>>> master_list, new_list = [], []
>>> for elem in x:
...     if not new_list:
...             new_list.append(elem)
...     elif elem == new_list[-1]:
...             new_list.append(elem)
...     else:
...             master_list.append(new_list)
...             new_list = [elem]
>>> master_list.append(new_list)
>>> master_list
[[4, 4], [1], [6, 6, 6], [1, 1, 1, 1]]
票数 3
EN

Stack Overflow用户

发布于 2020-02-01 13:12:16

试试这个:

代码语言:javascript
复制
from itertools import groupby

a = [4, 4, 1, 6, 6, 6, 1, 1, 1, 1]
new_list=[] 
for k,g in groupby(a): 
    new_list.append(list(g))

new_list将是您的预期结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60017135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档