我有一个清单数字说,
[1,2,3,6,8,9,10,11]
(n, n+1)首先,我想获得列表中数字之间的差异之和(步长) 。
其次,如果一组连续的数字之间相差1,则将它们放入一个列表中,即本例中有两个这样的列表,
[1,2,3]
[8,9,10,11]
然后将其余数字放入另一个列表中,即示例中只有一个这样的列表,
[6]。
第三,从顺序列表中获取具有最大/最小大小的列表,即[1,2,3],[8,9,10,11]在本例中,最大列表是,
[8,9,10,11]
最小列表是
[1,2,3]。
实现这一点的最佳方法是什么?
(n, n+1)首先,我想获得列表中数字之间的差异之和(步长) 。
用于sum列表中元素的连续差异:
>>> sum(lst[i] - x for i, x in enumerate(lst[:-1], start=1))
10
Run Code Online (Sandbox Code Playgroud)
其次,如果一组连续的数字之间相差1,则将它们放入一个列表中,即本例中有两个这样的列表,然后将其余数字放入另一个列表中,即在这个例子中只有一个这样的列表这个例子,
itertools.groupby这是通过对参考对象上每个元素的差异进行分组来实现的itertools.count:
>>> from itertools import groupby, count
>>> c = count()
>>> result = [list(g) for i, g in groupby(lst, key=lambda x: x-next(c))]
>>> result
[[1, 2, 3, 4], [6], [8, 9, 10, 11]]
Run Code Online (Sandbox Code Playgroud)
第三,从上面获取具有最大/最小尺寸的列表
maxmin关键功能为:sum
>>> max(result, key=sum)
[8, 9, 10, 11]
>>> min(result, key=sum)
[6] #??? shouldn't this be [6]
Run Code Online (Sandbox Code Playgroud)