【发布时间】:2019-12-03 04:08:57
【问题描述】:
我有一个排序的List<int>,比如{ 1, 2, 3, 4, 6, 7, 9 }
我想把它分成几组——每组都有这样的连续数字:{ {1, 2, 3, 4}, {6, 7}, {9} }
我知道我可以使用for循环遍历列表,比较当前值和前一个值,然后决定是追加到最后一个组还是创建一个新组。但我想找到一种“漂亮”的方式来做到这一点。也许使用 LINQ?
编辑:
我从项目more-itertools中找到了一个python代码:
def consecutive_groups(iterable, ordering=lambda x: x):
for k, g in groupby(
enumerate(iterable), key=lambda x: x[0] - ordering(x[1])
):
yield map(itemgetter(1), g)
【问题讨论】:
-
你所说的“到某个切片”是什么意思?目前尚不清楚如何从 1 个集合到 3 个具有不同数量元素的集合。
-
@itsme86 我有同样的问题,直到我读到“连续数字”
-
为什么
for循环不“漂亮”?我的猜测是 Linq 解决方案实际上会“更丑”恕我直言。 -
编程的目标是写漂亮的代码还是高质量的代码?如果您遇到需要循环的问题,没有什么比循环更好的了。
-
我很难理解为什么这个问题因为“基于意见”而获得如此多的密切投票。我认为似乎相当清楚的是,大多数人似乎都在考虑此类问题的“漂亮”一词是由于不熟悉英语而被使用的,而不是按字面意思理解的。