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

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

将整数列表转换为逗号分隔范围的字符串的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%。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5587574.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-14
下一篇2022-12-14

发表评论

登录后才能评论

评论列表(0条)

    保存