首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“折叠”连续数字的ELI5 Python群代码

“折叠”连续数字的ELI5 Python群代码
EN

Stack Overflow用户
提问于 2018-09-25 00:42:20
回答 2查看 61关注 0票数 4

我已经组装了一些代码,可以从各种SO帖子中提取出我想要的内容,但我不太确定它是如何工作的。想知道是否有人能帮我节省一些时间和ELI5是如何工作的。

列出可以或不连续的数字:

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

list_of_num = [1,3,4,5,6,10,11,13,15,17,18]
for _, value in groupby(enumerate(list_of_num), lambda i_x: i_x[0] - i_x[1]):
    collapsed_nums = map(itemgetter(1), value)

每次迭代的输出是: 1,3,4,5,6,10,11,13,15,17,18

如何组合lambda函数和枚举来产生这个输出?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-25 00:56:05

通过查看groubpy键的输入和输出,您可以看到它是如何工作的:

代码语言:javascript
复制
list_of_num = [1,3,4,5,6,10,11,13,15,17,18]

>>> for i_x in enumerate(list_of_num):
 ...:     print((i_x, i_x[0] - i_x[1]))
 ...:     
((0, 1), -1)
((1, 3), -2)
((2, 4), -2)
((3, 5), -2)
((4, 6), -2)
((5, 10), -5)
((6, 11), -5)
((7, 13), -6)
((8, 15), -7)
((9, 17), -8)
((10, 18), -8)

把它拆开:

  • enumerate(list_of_num) -这是一个可迭代的,它将发出列表中项的位置的元组,然后是值本身。
  • groupby(..., lambda i_x: i_x[0] - i_x[1]) - groupby采用可迭代的方法,并将顺序元素组合在一起,其中键(第二个参数)返回相同的值。
  • lambda i_x: i_x[0] - i_x[1] --这是一个函数,它接受一个或多个元素序列,并返回前两个元素之间的差异。假设您要将enumerate的输出传递给它,它总是列表中的数字与其在列表中的位置之间的区别。

把它们放在一起--连续的数字将有一个恒定的值来表示数字和它在列表中的位置之间的差异,因此,枚举一个数字列表,然后根据该差异进行分组,将序列数的运行组合在一起。

票数 4
EN

Stack Overflow用户

发布于 2018-09-25 00:53:40

查看您的列表、它的枚举以及它们之间的差异(这是您的关键功能度量)。

代码语言:javascript
复制
 0  1  2  3  4  5   6   7   8   9   10   # indices
[1, 3, 4, 5, 6, 10, 11, 13, 15, 17, 18]  # list
 1  2  2  2  2  5   5   6   7   8   8    # difference (key function value)

这就是关键功能所做的一切。因为枚举总是增加1,如果值也增加了1,那么值和索引之间的差异将保持不变,这意味着groupby将将这些项组合在一起。

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

https://stackoverflow.com/questions/52489079

复制
相关文章

相似问题

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