请问如何优雅的实现数组的这样的需求呢?

WBOY
发布: 2016-08-18 09:16:23
原创
960 人浏览过

有数组[1,2,3,7,9,10,11,16]

请问如何快速优雅的获取到.1-3,7,9-11,16

这样的结果呢?

我想这是 先对数组sort 之后循环判断当前值是否是上一个的+1. 根据结果进行字符串的拼接. 但是感觉很繁琐. 不知道有什么好的优雅的方式呢?

谢谢.

回复内容:

有数组[1,2,3,7,9,10,11,16]

请问如何快速优雅的获取到.1-3,7,9-11,16

这样的结果呢?

我想这是 先对数组sort 之后循环判断当前值是否是上一个的+1. 根据结果进行字符串的拼接. 但是感觉很繁琐. 不知道有什么好的优雅的方式呢?

谢谢.

這邊是 Python 的版本 (抱歉不會 PHP):

<code class="python">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))))</code>
登录后复制

我回答過的問題: Python-QA

我第一个想法也是跟题主一样=。=

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!