将排序后的数字列表(如[1,2,3,4])转换为指定范围的字符串,如python中的“ 1-4”

时间:2018-08-28 07:26:01

标签: python list range

我在python中有问题。

我有一个排序的数字列表,例如[1,2,3,4,5]。 如果排序的数字是连续或连续的,我需要获取一个字符串,指定范围为“ 1-5”。

谢谢 吉里什

3 个答案:

答案 0 :(得分:1)

您可以使用more_itertools

import more_itertools

a=[1,2,3,4,5,8,9,10,12,13,14,15]

to_range = ["{}-{}".format(groups[0],groups[-1]) for groups in map(list,more_itertools.consecutive_groups(a))]

#['1-5', '8-10', '12-15']

如果范围必须包含至少2个元素(即[1] 1-1不允许),则可以添加条件:

to_range = ["{}-{}".format(groups[0],groups[-1])  for groups in map(list,more_itertools.consecutive_groups(a)) if groups[0] != groups[-1]]

答案 1 :(得分:0)

鉴于l = [1,2,3,4,5],您可以在对包含列表中第一项和最后一项的输出进行格式化之前,先进行以下条件检查,看看它是否包含一个连续的整数列表:

if l == list(range(l[0], l[-1] + 1)):
    print('{}-{}'.format(l[0], l[-1]))

答案 2 :(得分:0)

first = my_list[0]
last = my_list[-1]
text = f'{first}-{last}'