我正在尝试使用生成器函数,该函数将数字字符串列表多次压缩为连续范围的列表。它适用于第一个列表,但似乎不适用于第二个列表。
正在使用的功能来自https://code.activestate.com/recipes/496682-make-ranges-of-contiguous-numbers-from-a-list-of-i/。我打算将其称为许多不同的列表。我以前曾尝试关闭生成器,但由于未将其变成对象,所以我不知道该怎么做。
生成器:
def list2range(lst):
'''make iterator of ranges of contiguous numbers from a list of integers'''
tmplst = lst[:]
tmplst.sort()
start = tmplst[0]
currentrange = [start, start + 1]
for item in tmplst[1:]:
if currentrange[1] == item:
# contiguous
currentrange[1] += 1
else:
# new range start
yield tuple(currentrange)
currentrange = [item, item + 1]
# last range
yield tuple(currentrange)
调用函数:
def condense(lst):
lst_int = list(map(int, lst))
lst_cond_str = ''.join(map(str, list(list2range(lst_int))))
return lst_cond_str
第一组按预期工作,结果为(1, 191)(206, 221)(308, 540)
。第二组应该是(191, 206)
,但改为(191, 192)(191, 193)(192, 194)(193, 195)(194, 196)(195, 197)(196, 198)(197, 199)(198, 200)(199, 201)(200, 202)(201, 203)(202, 204)(203, 205)(204, 206)(205, 206)
。