廖雪峰python 3チュートリアル学習ノート(高度な特性)

13582 ワード

一.スライス1.あるリストからあるデータ:list[n:m]を取り出す、取得した要素インデックスは区間ビット[n,m)となる.
>>> L=['a','b','c','d']
>>> L[0:2]
['a', 'b']

2.インデックスは負数で表すこともできます.最初の要素から取得する場合は、0の数字は省略できます.たとえば、次のようになります.
>>> L[:2]
['a', 'b']

3.2つごとに1つずつ取る:
>>> L[:10:2]
[0, 2, 4, 6, 8]

4.すべての数を5つごとに1つずつ取ります.
>>> L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

二.反復1.pythonでの反復は、インデックスのあるデータ型だけでなく、dictなどのインデックスのないデータ型にも使用できます.
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> for key in d:
... print(key)
...
a
c
b

dictの格納はlist方式で順番に並べられていないため,反復した結果の順序が異なる可能性がある.
2.オブジェクトが反復可能かどうかを判断する
>>> isinstance('abc',Iterable)
True
>>> isinstance(123,Iterable)
False

3.listに対してJavaのような下付きループを実現する:
>>> for i,value in enumerate(['A','B','C']):
...     print(i,value)
...
0 A
1 B
2 C

リスト生成式1.[1*1,2*2,...,10*10]というリストを生成するには,ループのほかに,以下のコードで生成することができる.
>>> [x*x for x in range(1,11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>>

2.forサイクルの後にif判断を加えることもでき、偶数のみの平方をスクリーニングすることができます.
>>> [x * x for x in range(1, 11) if x % 2 == 0]
[4, 16, 36, 64, 100]

3.2層のループを使用して、フル配列を生成します.
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

練習する
>>> # -*- coding: utf-8 -*-
... L1 = ['Hello', 'World', 18, 'Apple', None]
>>>
>>> [s.lower() for s in L1 if isinstance(s,str)]
['hello', 'world', 'apple']