扫码关注官方订阅号
有数组[1,2,3,7,9,10,11,16]
[1,2,3,7,9,10,11,16]
请问如何快速优雅的获取到.1-3,7,9-11,16
1-3,7,9-11,16
这样的结果呢?
我想这是 先对数组sort 之后循环判断当前值是否是上一个的+1. 根据结果进行字符串的拼接. 但是感觉很繁琐. 不知道有什么好的优雅的方式呢?
谢谢.
光阴似箭催人老,日月如移越少年。
這邊是 Python 的版本 (抱歉不會 PHP):
import itertools def group_by_range(lst): lst.sort() for key, group in itertools.groupby(enumerate(lst), lambda t: t[1]-t[0]): rp = list(group) head, tail = rp[0][1], rp[-1][1] yield '{}-{}'.format(head, tail) if head!=tail else str(head) if __name__ == '__main__': lst = [1,11,10,9,2,3,7,16] print(','.join(list(group_by_range(lst))))
我回答過的問題: Python-QA
我第一个想法也是跟题主一样=。=
代码虽然感觉有些繁琐,但是运行的时间复杂度是O(n)啊,所以这种方式算是挺可行的了吧
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
這邊是 Python 的版本 (抱歉不會 PHP):
我回答過的問題: Python-QA
我第一个想法也是跟题主一样=。=
代码虽然感觉有些繁琐,但是运行的时间复杂度是O(n)啊,所以这种方式算是挺可行的了吧