itertools
ライブラリは一般的に非常に役立つので、ライブラリに関する知識を深めようとしています。そのために、出くわしたインタビューパズルを解こうとしています。その大部分は、数値内でグループ化され、繰り返される数字の数を順番にカウントすることを含みます。たとえば、番号の場合:
1223444556
私が欲しい:
[(1,1),(2,2),(1,3),(3,4),(2,5),(1,6)]
つまり、左から右に、1 が 1、2 が 2、1 が 3 などです。
これが私の現在のコードです:
from itertools import groupby
groups_first = [int(''.join(v)[0]) for k,v in groupby(str(1223444556))]
counts = [len(''.join(v)) for k,v in groupby(str(1223444556))]
zip(counts,groups_first)
それは機能しますが、私が知りたいのは、2 つのリストを一緒に圧縮することを回避する、よりコンパクトな方法があるかどうかです。何かご意見は?これは、groupby() である種のラムダ関数を実行することになると思いますが、まだわかりません。
ありがとう!