您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

将整数列表转换为逗号分隔范围的字符串的Pythonic方法

将整数列表转换为逗号分隔范围的字符串的Pythonic方法

>>> from itertools import count, groupby
>>> L=[1, 2, 3, 4, 6, 7, 8, 9, 12, 13, 19, 20, 22, 23, 40, 44]
>>> G=(list(x) for _,x in groupby(L, lambda x,c=count(): next(c)-x))
>>> print ",".join("-".join(map(str,(g[0],g[-1])[:len(g)])) for g in G)
1-4,6-9,12-13,19-20,22-23,40,44

这里的想法是将每个元素与count()配对。然后,对于连续值,该值与count()之间的差是恒定的。groupby()完成其余工作

正如Jeff所建议的那样,count()可以使用替代方法enumerate()。这增加了一些多余的杂物,需要在print语句中删除

G=(list(x) for _,x in groupby(enumerate(L), lambda (i,x):i-x))
print ",".join("-".join(map(str,(g[0][1],g[-1][1])[:len(g)])) for g in G)

对于此处给出的示例列表,带有枚举的版本比我计算机上使用count()的版本慢大约5%。

python 2022/1/1 18:37:56 有233人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶