【发布时间】:2019-06-10 11:12:15
【问题描述】:
我有一个列表,其中包含按升序排列的数字
[0, 1, 3, 4, 6]
或
[2, 3, 4, 5]
我需要获取一个列表列表,其中包含作为范围项目的元素,例如
[[start, end], [start, end]] 来自输入列表。
[[0, 1], [3, 4], [6, 6]]
或
[[2, 5]]
输入列表中不存在的元素应该放在哪里。
这是我尝试过的代码。但不知道如何获得。
zers = [0, 1, 3, 4, 6]
ls = []
for i, j in enumerate(zers):
if i!=len(zers)-1 and zers[i+1]==zers[i]+1:last=i;continue
else:
if i==0:ls.append([i,i])
else:ls.append([last, i])
print(ls)
应该给[[0, 1], [3, 4], [6, 6]]
但是给[[0, 1], [2, 3], [2, 4]]
请随时对我的代码进行任何修改或提供完全不同的解决方案。
我认为现有库中应该有一个函数,但不确定。如果您遇到这种情况,请告诉我。
【问题讨论】:
-
enumerate增加了混乱。它产生的对是“索引”、“值”。您只使用索引,而忽略了值,因此它等同于for i in range(len(zers)):。 -
我可以像
[[0, 3], [4, 6]]一样从[0, 1, 3, 4, 6]生成一个列表吗?你如何有所作为? -
[0, 3] 是错误的,因为它不包含 2。
-
@Shahroozevsky 您的示例不正确。再次阅读帖子。对于您的示例,正确的结果是
[[0, 1], [3, 4], [6, 6]]。您提出的输出意味着2存在于1和3之间,但显然不是。 -
@Shahroozevsky 不。元组项应该类似于范围。
[Start, End]该范围内的所有数字都应该出现在输入列表中。
标签: python python-3.x list python-3.6 sequence