我有一个数字列表,我想打印一个列表,将它们汇总成范围。例如
输入
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']
但是我仍然没有得到想要的输出。任何帮助将不胜感激!
答案 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']