請問如何優雅的實現數組的這樣的需求呢?

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學習者快速成長!