Python:根据整数间隔分割整数列表

6 投票
5 回答
2061 浏览
提问于 2025-04-17 16:44

我遇到了一个问题。我有一个整数列表,我想把它分成多个子列表,每当原始列表中两个元素之间的差不是1的时候,就进行分割。

举个例子:输入是 [0, 1, 3, 5, 6, 7],那么输出应该是 [[0, 1], [3], [5, 6, 7]]。

我写了一个函数,但感觉写得很糟糕,所以想请大家帮我找一个更好的解决方案。我试过用 itertools,但没能解决。

这是我的解决方案:

def _get_parts(list_of_indices):
    lv = list_of_indices
    tuples = zip(lv[:-1], lv[1:])
    split_values = []
    for i in tuples:
        if i[1] - i[0] != 1:
            split_values.append(i[1])
    string = '/'.join([str(i) for i in lv])
    substrings = []
    for i in split_values:
        part = string.split(str(i))
        substrings.append(part[0])
        string = string.lstrip(part[0])
    substrings.append(string)
    result = []
    for i in substrings:
        i = i.rstrip('/')
        result.append([int(n) for n in i.split('/')])
    return result

非常感谢!

5 个回答

0

这里有一个使用for循环的解决方案。

def splitbystep(alist):
  newlist = [[alist[0]]]
  for i in range(1,len(alist)):
    if alist[i] - alist[i-1] == 1:
      newlist[-1].append(alist[i])
    else:
      newlist.append([alist[i]])
  return newlist
2

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有小错误,或者是因为我们没有理解某些概念。

当我们在网上寻找解决方案时,像StackOverflow这样的论坛就很有帮助。在这些地方,很多程序员会分享他们的经验和解决办法。你可以在这里找到别人遇到的类似问题,以及他们是如何解决的。

如果你在学习编程,遇到困难时,不妨去这些论坛看看,可能会找到你需要的答案。同时,也要记得多动手实践,只有通过不断尝试,才能更好地理解编程的世界。

def _get_parts(i, step=1):
    o = []
    for x in i:
        if o and o[-1] and x - step == o[-1][-1]:
            o[-1].append(x)
        else:
            o.append([x])
    return o

_get_parts([0, 1, 3, 5, 6, 7], step=1)
# [[0, 1], [3], [5, 6, 7]])
9

这个可以和任何可迭代的东西一起使用

>>> from itertools import groupby, count
>>> inp = [0, 1, 3, 5, 6, 7]
>>> [list(g) for k, g in groupby(inp, key=lambda i,j=count(): i-next(j))]
[[0, 1], [3], [5, 6, 7]]

撰写回答