『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)
追記
ぎゃぁぁぁ、higeponさんのとこでこのコード取り上げられちゃった(||゚Д゚)
おいらだけ初心者レベルなんですけど...(つдT)
個人的に Scheme -> Python コード書き換えの最高傑作は『SICP 2.2.4 Example: A Picture LanguageをPythonでやってみたらデキタ━━━━(゚∀゚)━━━━ッ!! - 牌語備忘録 - pygo』なんですけどね。
もう今は何書いてるか理解できなくなってるかもしれんけど...(´・ω・`)