在pythonlis中查找元素之间的delta差异

2024-09-28 04:23:44 发布

您现在位置:Python中文网/ 问答频道 /正文

女士们先生们,大家好

我有一段代码可以在列表中找到连续的数字:

from itertools import groupby
from operator import itemgetter

a = [1,2,3,5,55,56]

def consc(b):
  for k, g in groupby(enumerate(b), lambda (i,x):i-x):
     print map(itemgetter(1), g)  

consc(a)

输出:

^{pr2}$

但是,我也希望能够寻找其他三角洲(1到10),例如,如果差值为2,则同一列表中的输出结果如下:

[1]
[2]
[3,5]
[55]
[56]

谢谢!在


Tags: 代码infromimport列表fordef数字
1条回答
网友
1楼 · 发布于 2024-09-28 04:23:44

实际上是一个非常简单的修改:

from itertools import groupby, count
from operator import itemgetter

a = [1,2,3,5,55,56]

def consc(b, step):
  for k, g in groupby(zip(count(step=step), b), lambda (i, x): i-x):
     print map(itemgetter(1), g)

consc(a, 2)

它给出了:

^{pr2}$

我们没有使用enumerate(),而是使用了zip()和{},这会得到想要的结果。在

清理一下:

from itertools import groupby, count
from operator import itemgetter

def _sub(item):
    a, b = item
    return a - b

def consecutive(iterable, step):
    for _, g in groupby(zip(count(step=step), iterable), _sub):
        yield map(itemgetter(1), g)

a = [1, 2, 3, 5, 55, 56]

print(list(consecutive(a, 2)))

这里有一个生成器,并使用更具描述性的名称。使用实际函数可以避免每次使用函数时都重新声明它,就像lambda。这在Python3.x中也可以通过避免使用参数解包(已从语言中删除)来实现。在

相关问题 更多 >

    热门问题