Re:Re:PythonでRubyのeach_with_indexみたいなもの
30分プログラム、その544。PythonでRubyのeach_with_indexみたいなもの。
kyeeva blog!を読んで、そういえばRuby1.9から
[1,2,3].each.with_index do|x,i| p x,i end
って書けるようになったんだよなぁ、と思ったのでやってみた。
最終的に、
for (x,i) in lst(['a','b','c']).each().with_index(): print x,i
と書けるようになったし、良しとしよう。
使い方
# 普通にループする(each()はなくてもいい) for x in lst(['a','b','c']).each(): print x # インデックスを付けてから、逆順にする for (x,i) in lst(['a','b','c']).each().with_index().reverse(): print x,i
ソースコード
#! /usr/bin/python # -*- mode:python; coding:utf-8 -*- # # with_index.py - # # Copyright(C) 2009 by mzp # Author: MIZUNO Hiroki / mzpppp at gmail dot com # http://howdyworld.org # # Timestamp: 2009/03/13 22:28:32 # # This program is free software; you can redistribute it and/or # modify it under MIT Lincence. # # generator wrapper class Enumerator(): def __init__(self,generator): self.generator = generator def each(self): return self def with_index(self): def f(): i = 0 for x in self.generator: yield (x,i) i += 1 return Enumerator(f()) def reverse(self): xs = list(self) xs.reverse() return Enumerator(xs.__iter__()) # for iteration def __iter__(self): return self.generator def lst(xs): return Enumerator(xs.__iter__()) if __name__ == '__main__': # I want to run following code for x in lst(['a','b','c']).each(): print x for (x,i) in lst(['a','b','c']).each().with_index().reverse(): print x,i