Python从数字列表生成连续数字列表

时间:2019-02-06 18:02:02

标签: python python-3.x

我有一个这样的列表,

List1 = [1,2,3,7,8,11,14,15,16]

我想使用python生成一个看起来像新列表的

List2 = ["1:3", "7:8", "11", "14:16"]

我该怎么做,在这里for循环选项。

我不想使用For循环,因为我的列表有3万多个数字。

1 个答案:

答案 0 :(得分:1)

您可以使用生成器:

List1 = [1,2,3,7,8,11,14,15,16]
def groups(d):
  c, start = [d[0]], d[0]
  for i in d[1:]:
    if abs(i-start) != 1:
      yield c
      c = [i]
    else:
      c.append(i)
    start = i
  yield c

results = [str(a) if not b else f'{a}:{b[-1]}' for a, *b in groups(List1)]

输出:

['1:3', '7:8', '11', '14:16']