反復処理の簡単なサンプル集 (Python)
[履歴] [最終更新] (2018/06/12 10:10:11)
最近の投稿
注目の記事

whileループ

sample.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

x = 10
while x:
    print x, # カンマをつけると改行せずに空白区切りで出力
    x -= 1 # pythonにはデクリメント演算子が存在しない (インクリメント演算子もない)
else: print x  # while判定が偽の後に実行される (break後は実行されない)


while False: print 'while' # 参考: do while, until はPythonにはない
else: print 'else' # break, continue が使用可能

while 1: pass # pass: 何もしない行であることを明示
# while x=1: pass # これはエラー (pythonでは代入ステートメントを式として使用できない)

出力例

$ python sample.py 
10 9 8 7 6 5 4 3 2 1 0
else
(Ctrl-c KeyboardInterrupt)

forループ

sample.py

for x in ['a', 'b', 'c']:
    print x,
else: print 'd' # whileと同様にfor判定が偽となると実行される (break後は実行されない)

for x in (1, 2, 3): print x**2,

for x in "DEF": print x,

for (x,y) in [(1,2), (3,4), (5,6)]: print x,y

res = [[],[]]
for x in ("alpha", "beta", "gamma"): res[0].append(x*2)
for x in ("alpha", "beta", "gamma"): res[1].extend([x,x*2]) # 複数要素の追加時 (厳密にはリストの追加時) はextendを用いる
print res

出力例

$ python sample.py 
a b c d
1 4 9 D E F 1 2
3 4
5 6
[['alphaalpha', 'betabeta', 'gammagamma'], ['alpha', 'alphaalpha', 'beta', 'betabeta', 'gamma', 'gammagamma']]

リスト内包表記 (for)

sample.py

print [2**x for x in [0,1,2,3,4,5,6,7,8,9,10]]
print [2**x for x in [0,1,2,3,4,5,6,7,8,9,10] if x%2==0]

List = ['a','b','c']
print [x+y for x in List for y in List]

出力例

$ python sample.py 
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
[1, 4, 16, 64, 256, 1024]
['aa', 'ab', 'ac', 'ba', 'bb', 'bc', 'ca', 'cb', 'cc']

イテレータ

sample.py

List = ['a','b','c']
Iter = iter(List)
print Iter.next()
print Iter.next()
print Iter.next()

出力例

$ python sample.py 
a
b
c

ディクショナリ

#!/usr/bin/python
# -*- coding: utf-8 -*-

Dict = {'key1':'val1',
        'key2':'val2',
        'key3':'val3'}

Iter = Dict.iteritems()

for key, value in Iter:
    print key
    print value

ジェネレータ

イテレータの一種であるジェネレータは以下のように作成します。Scala のストリームのように遅延評価されるため、巨大な配列を利用したい場合等であってもメモリを消費しません。無限長の配列も定義できます。

#!/usr/bin/python
# -*- coding: utf-8 -*-

def fibsUntil(n):
    a = 1
    b = 1
    yield a
    yield b
    while True:
        tmp = a
        a = a + b
        b = tmp
        if(a >= n):
            return
        yield a

def Main():
    # イテレータの一種であり for 文での利用できます。
    for k in fibsUntil(10):
        print k

    gen = fibsUntil(10)
    try:
        while True:
            # print gen.next()     # python 2.x
            # print gen.__next__() # python 3.x
            print next(gen)
    except StopIteration as e:
        # StopIteration 例外が発生します。
        print "%r" % e

if __name__ == '__main__':
    Main()

xrange

range() はリストを返しますが、xrange() を利用すると、都度値を generate して返すオブジェクトを作成できます。

range(1,10)
xrange(1,10)
関連ページ
    概要 AWS Glue を利用すると Apache Spark をサーバーレスに実行できます。基本的な使い方を把握する目的で、S3 と RDS からデータを Redshift に ETL (Extract, Transform, and Load) してみます。2017/12/22 に東京リージョンでも利用できるようになりました