Python数字列表汇总范围

时间:2020-03-22 18:38:59

标签: python python-3.x list

我有一个数字列表,我想打印一个列表,将它们汇总成范围。例如

输入

number_list = [1,2,3,5,7,9,10,11]

输出

['1 to 3',5,7,'9 to 11']

我的方法-

temp_list = []
final_list = []
number_list = [1,2,3,5,7,9,10,11]

for i in range(len(number_list)):
   if number_list[i-1] not in temp_list or i == 0:
      temp_list.append(number_list[i])
   else:
      if number_list[i] - number_list[previous_i] != 1:
         temp_list.append(previous_item)
         if temp_list[0] != temp_list[1]:
            final_list.append(f'{temp_list[0]} to {temp_list[1]}')
         else:
            final_list.append(temp_list[0])
         temp_list = []
      else:
         final_list.append(number_list[i])
   previous_item = number_list[i]
   previous_i = i

print (final_list)
# O/P : [2, '1 to 3', 7, 11] which should be ['1 to 3',5,7,'9 to 11']

但是我仍然没有得到想要的输出。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用more_itertools.consecutive_groups

import more_itertools as mit

groups = [list(group) for group in mit.consecutive_groups(number_list)]

[f'{g[0]} to {g[-1]}' if len(g) > 1 else g[0] for g in groups]

出局:

['1 to 3', 5, 7, '9 to 11']