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)
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']]
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()
range() はリストを返しますが、xrange()
を利用すると、都度値を generate して返すオブジェクトを作成できます。
range(1,10)
xrange(1,10)