Python:根据整数间隔分割整数列表
我遇到了一个问题。我有一个整数列表,我想把它分成多个子列表,每当原始列表中两个元素之间的差不是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]]