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

牌語備忘録 -pygo

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

牌語備忘録 -pygo

リストで数が連続して〜のコードが長いので短くしてみた

Python

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]


おしまい(゚Д゚)