我正在学习算法,有一个问题:
给出一个整数数组,将连续的元素打包到子列表中。
例如,给定列表4、4、1、6、6、6、1、1、1、1,返回[4、4、1、6、6、6、1、1、1、1]。
注意:如果列表中只有一个事件,那么它仍然应该在它自己的子列表中。
我创建了以下解决方案:
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]]它正在工作,但正如你所看到的,它不是很干净。我怎样才能改善这一点?
发布于 2020-02-01 13:11:52
你可以试试itertools.groupby
>>> 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]]
>>>另一种方式是:
>>> 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]]发布于 2020-02-01 13:12:16
试试这个:
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将是您的预期结果。
https://stackoverflow.com/questions/60017135
复制相似问题