![]() |
1
20
演示
代码 应用该工具,我们可以生成一个求连续数字范围的生成器函数。
这个 source 实现模拟 classic recipe (如@nadia alramli所示)。
注:
|
![]() |
2
104
编辑2:回答OP新要求
输出:
您可以用range或任何其他自定义类替换xrange。 python文档有一个非常整洁的 recipe 为此:
输出:
如果要获得完全相同的输出,可以执行以下操作:
输出:
编辑: 这个例子已经在文档中解释过了,但也许我应该更详细地解释一下:
如果数据是:
lambda函数从元素值中减去元素索引。所以当你在每个项目上应用lambda时。您将获得groupby的以下密钥:
groupby按相等的键值对元素进行分组,因此前4个元素将被分组在一起,以此类推。 我希望这能使它更可读。
首先导入所需的库
|
![]() |
3
15
“天真”的解决方案,我觉得至少有点可读性。
|
![]() |
4
12
假设您的列表已排序:
|
![]() |
5
8
在这里,它应该可以工作,而不需要任何导入:
|
![]() |
6
6
请注意,代码使用
|
![]() |
7
3
这不使用标准函数-它只是对输入进行迭代,但它应该可以工作:
注意,它要求输入只包含按升序排列的正数。您应该验证输入,但为了清晰起见,省略了此代码。 |
![]() |
8
1
这是我想出来的答案。我编写代码是为了让其他人理解,所以我对变量名和注释相当冗长。 首先是一个快速助手函数:
然后是实际代码:
实例运行:
返回:
|
![]() |
9
1
输出:
|
![]() |
10
0
使用numpy+理解列表:
输出:
注:省略了个别数字应被区别对待的请求(作为个别数字返回,而不是范围)。这可以通过进一步的后处理结果来实现。通常情况下,这会使事情变得更复杂,而不会获得任何好处。 |
![]() |
11
0
不需要额外导入就可以工作的简短解决方案。它接受任何iterable,对未排序的输入进行排序,并删除重复项:
例子:
这和@dansalmo的一样 solution 我发现这很神奇,虽然有点难阅读和应用(因为它不是作为函数给出的)。
注意,它可以很容易地修改为吐出“传统”的开放范围。
我把这个答案抄过来 another question 它被标记为这个主题的副本,目的是让它更容易被发现(在我刚刚再次搜索这个主题之后,一开始只在这里找到问题,对给出的答案不满意)。 |