在工作日列表中添加短划线

时间:2017-05-26 21:04:30

标签: python python-3.x

我有一个序列:

WEEKDAYS = [
    'Sun',
    'Mon',
    'Tue',
    'Wed',
    'Thu',
    'Fri',
    'Sat',
]

有如下输入:

['Sun', 'Thu', 'Fri', 'Sat']

我希望输出如下:

Sun, Thu - Sat

我很困惑怎么做。

1 个答案:

答案 0 :(得分:3)

这是使用itertools.groupby执行此操作的一种方法。输入列表中的项目根据它们在WEEKDAYS中的分布进行聚类,方法是将索引差异为1的组分组:

from itertools import count, groupby

lst = ['Sun', 'Thu', 'Fri', 'Sat']
c = count()
new_lst = []
for _, g in groupby(lst, lambda x: WEEKDAYS.index(x)-next(c)):
    g = list(g)
    if len(g) > 2:
        new_lst.append(g[0] + '-' + g[-1])
    else:
        new_lst.extend(g)
print(new_lst)
# ['Sun', 'Thu-Sat']

如果您需要避免在当前方法中进行多次WEEKDAYS调用,则可以将列表list.index设为字典。