从lis中连续出现的值中仅选择一个值

2024-04-26 00:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张这样的单子

l=[1,1,1,1,2,2,2,3,3,3,3,3,3,4,4,5,6,6,6,5,5,5,7,7,8,8,8,8,8,9,9,9,10,10]

现在我只想连续选择一个重复值的值,所以输出应该是这样的

l=[1,2,3,4,5,6,5,7,8,9,10]

我可以使用for循环检查下一个值和上一个值,并附加到一个列表中,但是在这种情况下执行时间非常长,需要寻找快捷方式来最有效地执行。你知道吗


Tags: 列表for时间情况单子快捷方式
3条回答

使用set数据结构删除重复项并将其转换回列表:

l = [1,1,1,1,2,2,2,3,3,3,3,3,3,4,4,5,6,6,6,5,5,5,7,7,8,8,8,8,8,9,9,9,10,10]

# remove duplicates
num = set(l)

# convert the set of unique values back to a list
num = list(num)

print(num)

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

您可以使用^{}对连续值进行分组,并且只保留分组键

from itertools import groupby

[k for k,_ in groupby(l)]
# [1, 2, 3, 4, 5, 6, 5, 7, 8, 9, 10]

您可以使用itertools.groupby或类似的东西(我没有特意使用zip或slices,并尽量使其简单)

def group_by(array):
    if not array:
        return array
    prev = array[0]
    result = [prev]
    for el in array:
        if el != prev:
            result.append(el)
        prev = el
    return result

是的,有了zip或enumerate或islice,它会更优雅,我知道:-)

相关问题 更多 >