如何创建一个尚未使用过的生成器新实例?

时间:2019-07-13 00:43:23

标签: python python-3.x

我正在尝试使用生成器函数,该函数将数字字符串列表多次压缩为连续范围的列表。它适用于第一个列表,但似乎不适用于第二个列表。

正在使用的功能来自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)

0 个答案:

没有答案