2009年3月2日月曜日

10 minutes topic

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

  1. def deal(member, data):  
  2.     """ 
  3.     >>> deal(3, "123123123") 
  4.     ['111', '222', '333'] 
  5.     >>> deal(4, "123123123") 
  6.     ['12', '23', '31', '12'] 
  7.     >>> deal(6, "012345012345012345") 
  8.     ['000', '111', '222', '333', '444', '555'] 
  9.     >>> deal(4, '111122223333') 
  10.     ['123', '123', '123', '123'] 
  11.     >>> deal(1, '012345012345012345') 
  12.     ['012345012345012345'] 
  13.     >>> deal(6, '01234') 
  14.     ['', '', '', '', '', ''] 
  15.     >>> deal(2, '') 
  16.     ['', ''] 
  17.     """  
  18.     from itertools import izip, cycle  
  19.     a = [''] * member  
  20.     for d, m in izip(data[:len(data) - len(data) % member],  
  21.             cycle(range(member))):  
  22.         a[m] += d  
  23.     return a  


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

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

0 件のコメント: