例如,如果我在Python中得到了一个类似[1,1,2,2,2,3,3,5,5,5]的列表,并且希望只删除select continuous number分组的第一个重复,然后中断并重复/递归以从第二个分组etcc中删除第一个重复……我该怎么做?示例如下:
分解方法:一旦代码检测到第一个重复的数字对,即列表[0]和列表[1]中的1,1,它就会删除列表[1],并通过跳过剩余的数字子组重复来打印解决方案。然后,它递归地回忆自己。这次跳过列表[0]和列表[1],找到列表[2],列表[3]有重复,删除列表[3],中断并重复。。。。最终产生四种不同的输出
alist = [1,1,2,2,2,3,3,5,5,5]
# insert code here"
>>output =
[1,2,2,2,3,3,5,5,5]
[1,1,2,2,3,3,5,5,5]
[1,1,2,2,2,3,5,5,5]
[1,1,2,2,2,3,3,5,5]
不使用递归配方,您可以使用
itertools.groupby()
将重复项分组,然后使用第一项并通过itertools.chain.from_iterable()
连接其余项:但是,如果您想在每次删除时获得所有结果,可以使用以下函数:
^{pr2}$使用^{} :
这里
^{pr2}$groups
是包含所有组的列表列表:现在我们可以迭代这个列表,并从当前组
g
中切出第一个项目,并使用切片和itertools.chain.from_iterable
将其与其余的组连接起来。在对于列表中的每个唯一元素,删除列表中的第一个实例。 每次迭代使用原始列表的新副本。在
相关问题 更多 >
编程相关推荐