higeponさんのとこで取り上げてもらったコードが自分のだけ超長いので短くしてみた(´・ω・`)
その1
map使えば短くなるかもみたいな?
def compact_number_list(lst): seq = [] map(lambda x:seq[-1].append(x[1]) if 0 <= x[0] and x[1] == lst[x[0] - 1] + 1 else seq.append([x[1]]), enumerate(lst)) return map(lambda x:[x[0], x[-1]] if len(x) > 1 else x[0], seq) lst=[1,3,4,5,6,12,13,15] print compact_number_list(lst)
結果
[1, [3, 6], [12, 13], 15]
参考になるような上級Pythonistaさんの書いたコードが見たいんですけど(つдT)。
その2
読み返した時に、何を書いたか理解できる程度に読みやすくしてみた(´・ω・`)
def compact_number_list(lst): if 1 < lst: seq = [] [seq.append([e]) if 0 <= i and e != lst[i - 1] + 1 else seq[-1].append(e) for i,e in enumerate(lst)] return map(lambda x:[x[0], x[-1]] if len(x) > 1 else x[0], seq) return lst
結果
>>> compact_number_list([1,3,4,5,6,12,13,15]) [1, [3, 6], [12, 13], 15] >>> compact_number_list([1]) [1] >>> compact_number_list([1,2]) [[1, 2]] >>> compact_number_list([1,3]) [1, 3]
おしまい(゚Д゚)