home changes contents help options

103:配列から条件を満たす要素を取得する

内包表現で、条件をつければよい。

 >>> li=['a','mpilrim','foo','b','c','b','d','d']
 >>> [elem for elem in li if len(elem) > 1]
 ['mpilrim', 'foo']
 >>> [elem for elem in li if elem != 'b']
 ['a', 'mpilrim', 'foo', 'c', 'd', 'd']
 >>> [elem for elem in li if li.count(elem) =1]
 SyntaxError: invalid syntax
 >>> [elem for elem in li if li.count(elem) ==1]
 ['a', 'mpilrim', 'foo', 'c']

次の例は、リストから奇数を求めるもの。奇数を求める関数(2で割った余りの値1を返す)を使う。
3つとも同じ結果になる。条件の関数を変えればいろいろな場合に対応できる。

 >>> def odd(n):
        return n % 2

 >>> li = [1,2,3,5,9,10,256,-3]
 >>> filter(odd, li)
 [1, 3, 5, 9, -3]

 >>> [e for e in li if odd(e)]
 [1, 3, 5, 9, -3]

 >>> filteredList=[]
 >>> for n in li:
        if odd(n):
                filteredList.append(n)

 >>> filteredList
 [1, 3, 5, 9, -3]