1
59
编辑:这也适用于有限列表。仅对于无限列表,Charles Stewart的解略短。 |
2
36
所有的解决方案都使用
可读性是最重要的 . 没有人想很快得到错误的答案。但在函数式编程中,经常会出现多种解决方案,所有解决方案都具有相同的可读性,其中一些是分配的,而另一些是不分配的。养成寻找这些东西的习惯真的很重要 解决。
您可能会认为优化器可以消除分配,但您只对了一半。GHC是世界上最好的Haskell优化编译器,它确实避免了为每个元素分配一对;它融合了
|
3
16
即使在无限的列表上也应该工作。 (编辑:已测试并更正。) |
4
13
从第一个元素开始:
从第n个元素开始:
|
5
12
|
6
11
姆哈里斯的回答很好。但我喜欢避免使用
|
7
10
另一种解决方法
|
8
10
前几天我对我的Haskell版本进行了裸机测试,因此未经测试,但以下内容似乎比其他版本更简单(利用模式匹配和drop来避免zip和mod):
|
9
5
另一种方法是:
还有一个:
|
10
2
Nefrubyr回答的丑陋版本被保留下来,因此评论是有意义的。
|
11
2
显式递归是邪恶的!使用诸如映射、过滤、折叠、扫描、复制、迭代等库结构。除非它使代码变得非常容易阅读,甚至对那些熟悉库的人来说也是如此,否则它只会使您的代码更少模块化,更冗长,更难推理。
我更喜欢使用地图:
而不是ja的列表理解,这样读者就不必担心我是什么。但无论哪种方式,当它可能是O(n)时,它都是O(n^2),所以这可能更好:
|
12
1
我会为自己感到骄傲,直到我看到格雷格在我面前得到了同样的答案 |
13
1
这里的许多答案已经使用了Data.List.unfover,但我想提出一种有趣的方法来编写有点烦人的unfover,这在其他上下文中可能会有所帮助:
当列表为空时,
|
14
1
有点傻的版本
|
15
1
(这是针对 a comment 要求解决方案(不间断)
适用于有限和无限列表:
|
16
0
这似乎是“展开”的更好用法:
|
17
0
老问题,但我会发布我的想法:
我把list参数放在
|
18
0
然后使用
|
19
0
看见 documentation 和 source :
|
20
0
一个没有明显条件的非常实用的函数:
|
21
0
我们可以使用列表:
|
22
-1
我的解决办法是:
|
23
-1
公认答案的更丑陋、更有限的版本
对于“线高尔夫”,可以这样写:
(因为它有一个不必要的
|
danial · 如何在多个字符串的每个位置找到最频繁的字符 1 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
The Great · 拆分并存储数据帧,但名称基于特定列中的唯一值 2 年前 |
Klimt865 · Python中的列表列表 2 年前 |
Klimt865 · 在Python中将数组列表转换为列表列表 2 年前 |