読者です 読者をやめる 読者になる 読者になる

牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

リストで数が連続している部分の両端のみにするコードをPythonでやってみた。

Python

http://d.hatena.ne.jp/higepon/20080925/1222326246』さんでScheme

'(1 3 4 5 6 12 13 15)

'(1 (3 . 6) (12 . 13) 15)

にするコードをやっていたのでPythonでやってみた。

Python

#!/usr/bin/env python
# *-# -*- coding: utf-8 -*-
 
def division_num_list(lst):
    div_lst = []
    previouns_num = lst[0]
    tmp_lst = [lst[0]]
    for num in lst[1:]:
        if num == previouns_num + 1:
            tmp_lst.append(num)
        else:
            div_lst.append(tmp_lst)
            tmp_lst = [num]
        previouns_num = num
    else:
        if tmp_lst:
            div_lst.append(tmp_lst)
    return div_lst

def number_range_list(lst):
    result_lst = []
    for seq in lst:
        if len(seq) == 1:
            result_lst.append(seq[0])
        if len(seq) > 1:
            result_lst.append([seq[0],seq[-1]])
    return result_lst

def compact_number_list(lst):
    div_lst = division_num_list(lst)
    return number_range_list(div_lst)


if __name__ == '__main__':
    lst = [1, 3, 4, 5, 6, 12, 13, 15]
    print compact_number_list(lst)
実行結果
[1, [3, 6], [12, 13], 15]

えらく冗長になっちゃった(||゚Д゚)
久しぶりにPythonのコード書いたからかしらん?
短期間で退化してる(つдT)

追記

ぎゃぁぁぁ、higeponさんのとこでこのコード取り上げられちゃった(||゚Д゚)
おいらだけ初心者レベルなんですけど...(つдT)


個人的に Scheme -> Python コード書き換えの最高傑作は『SICP 2.2.4 Example: A Picture LanguageをPythonでやってみたらデキタ━━━━(゚∀゚)━━━━ッ!! - 牌語備忘録 - pygo』なんですけどね。
もう今は何書いてるか理解できなくなってるかもしれんけど...(´・ω・`)