2009年3月2日月曜日

10 minutes topic

http://d.hatena.ne.jp/CortYuming/20090224/p1


def deal(member, data):
"""
>>> deal(3, "123123123")
['111', '222', '333']
>>> deal(4, "123123123")
['12', '23', '31', '12']
>>> deal(6, "012345012345012345")
['000', '111', '222', '333', '444', '555']
>>> deal(4, '111122223333')
['123', '123', '123', '123']
>>> deal(1, '012345012345012345')
['012345012345012345']
>>> deal(6, '01234')
['', '', '', '', '', '']
>>> deal(2, '')
['', '']
"""
from itertools import izip, cycle
a = [''] * member
for d, m in izip(data[:len(data) - len(data) % member],
cycle(range(member))):
a[m] += d
return a


見ないようにしたのに、似たような回答になってしまった。
本当は初期値を準備せずにうまいことやりたかったんだけど。
たとえばreduceは、どんな理論か知りませんが、適切に初期値を準備してくれますよね。
文字列の += もいやな感じ。
行数を増やさずにjoinにしたい。

ワンライナーがかけるようになりたい。

0 件のコメント: