Python基礎学習まとめ(4)

PHP中文网
リリース: 2017-07-09 18:13:49
オリジナル
1343 人が閲覧しました

6. 高度な機能

6.1 反復

リストまたはタプルが与えられた場合、for ループを通じてリストまたはタプルを走査することができます。この走査は反復と呼ばれます。 Python では、反復は for...in で行われます。

dict はリストの順序で保存されないため、反復された結果の順序は異なる可能性があります。デフォルトでは、dict はキーを反復処理します。値を反復したい場合は、d.values() で for value を使用できます。キーと値を同時に反復したい場合は、d.items() で for k, v を使用できます。

文字列は反復可能なオブジェクトでもあるため、for ループでも使用できます。

>>> 「ABC」のチャンネル:

... print(ch)

...

B

C

オブジェクトが反復可能なオブジェクトかどうかを判断するにはどうすればよいですか?方法はコレクションモジュールのIterable型で判断します:

>>> コレクションから Iterable をインポートします

>>> isinstance('abc', Iterable) # str が反復可能かどうか

本当

>>> isinstance([1,2,3], Iterable) # リストが反復可能かどうか

本当

>>> isinstance(123, Iterable) # 整数が反復可能かどうか

誤り

Java のような添え字ループをリストに実装したい場合はどうすればよいですか? Python の組み込みの列挙関数は、リストをインデックスと要素のペアに変換できるため、インデックスと要素自体の両方を for ループで反復できます。

>>> for i, enumerate(['A', 'B', 'C']):

... print(i, value)

...

0A

1B

2C

6.2 リスト内包表記

リスト内包表記は、リストの作成に使用できる、Python に組み込まれた非常にシンプルだが強力な生成機能です。

リスト[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]を生成するには、list(range(1, 11))を使用できます。

リスト生成式を書く際は生成する要素を入れる x * for ループの後に if 判定を追加して、偶数の平方のみをフィルターで除外することもできます。

>>> [x * x for x in range(1, 11) if x % 2 == 0]

[4、16、36、64、100]

2 レベルのループを使用して完全なアレンジメントを生成することもできます:

>>> [「ABC」の m + n は「XYZ」の n]

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

リスト生成では、次の 2 つの変数を使用してリストを生成することもできます。

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }最後に、リスト内のすべての文字列を小文字に変更します:

>>> [k + '=' + v for k, v in d.items()]

['y=B', 'x=A', 'z=C']

>>> L = ['Hello', 'World', 'IBM', 'Apple']6.3 ジェネレータ式

>>> [L の s の s. lower()]

['hello'、'world'、'ibm'、'apple'】

リストの要素をあるアルゴリズムに従って計算できれば、ループ中に後続の要素を継続的に計算することができ、Pythonではこのループしながら計算する仕組みをジェネレーター:generatorと呼びます。

ジェネレーターを作成する方法はたくさんあります。最初の方法は非常に簡単で、リスト生成式の [] を () に変更してジェネレーターを作成するだけです。

>>> L = [範囲(10)のxに対するx * x]
>>>L

;

[0、1、4、9、16、25、36、49、64、81]

>>> g = (x * 範囲(10) の x)

>>>

0x1022ef630>

Lとgの作り方の違いは一番外側の[]と()だけで、Lはリスト、gはジェネレータです。それらを 1 つずつ出力したい場合は、next() 関数を通じてジェネレーターの次の戻り値を取得できます。すでに述べたように、ジェネレーターは next(g) が呼び出されるたびに、最後の要素が計算されるまで g の次の要素の値を計算し、StopIteration エラーがスローされます。

>>>次(g)

0

>>>次(g)

1

>>>次(g)

4

>>>次(g)

9

>>>次(g)

16

>>>次(g)

25

>>>次(g)

36

>>>次(g)

49

>>>次(g)

64

>>>次(g)

81

>>>次(g)

トレースバック (最後の呼び出し):

ファイル「」、 の 1 行目

反復を停止

ジェネレーターも反復可能なオブジェクトであるため、正しい方法は for ループを使用することです。

>>> g = (x * 範囲(10) の x)

>>> g の場合:

...print(n)

...

0

1

4

9

16

25

36

49

64

81

ジェネレーターを定義する別の方法。関数定義に yield キーワードが含まれている場合、その関数は通常の関数ではなくジェネレーターになります:

def fib(max):

n、a、b = 0、0、1

n

evell b

a、b = b、a + b

n = n + 1

「完了」を返す

6.4 タプルの解凍

タプルの要素('東京'、2003、32450、0.66、8014)を変数city、year、pop、chg、areaにそれぞれ代入し、たった1行の宣言ですべての代入を書きます。 同様に、次の行の % 演算子は、パスポート タプルの要素を print 関数のフォーマット文字列のギャップにマップします。これらは両方ともタプルのアンパックの応用です。

タプルのアンパックの最もよく知られた形式は並列代入です。これは、反復可能なオブジェクト内の要素を、対応する変数で構成されるタプルに代入することを意味します。

並列割り当て:

* 演算子を使用して、反復可能なオブジェクトを関数パラメータとして分割できます。

>>> lax_座標 = (33.9425, -118.408056)

>>> 緯度、経度 = lax_co座標 # タプルの解凍

>>>

33.9425

>>>

-118.408056

>>> divmod(20, 8) (2, 4) ここでのタプルアンパックの使用法は、関数がタプルの形式で複数の値を返せるようにすることであり、その後、関数を呼び出すコードはこれらの戻り値を簡単に受け入れることができます。たとえば、os.path.split() 関数は、パスと最後のファイル名 (path, last_part) で構成されるタプルを返します:
>>>t = (20, 8)

>divmod(*t)

(2, 4)

>>> 商、剰余 = divmod(*t)

>>> 商、余り

(2, 4)

>>> OSをインポートします Pythonでは、*argsを使用して不確実な数のパラメータを取得する関数の古典的な書き方です。 Python 3 では、この概念が並列代入に拡張されました。
>>> _、ファイル名 = os.path.split('/home/luciano/.ssh/idrsa.pub')

>>>

「idrsa.pub」

>>> a、b、*残り = range(5) >>> a、b、休憩

(0, 1, [2, 3, 4])

>>> a、b、*残り = range(3)

>>> a、b、休憩

(0, 1, [2])

>>> a、b、*残り = range(2)

>>> a、b、休憩

(0, 1, [])

並列代入では、* プレフィックスは変数名の前でのみ使用できますが、この変数は代入式のどこにでも使用できます。

>>> a, *body, c, d = range(5)

>>> a、ボディ、c、d

(0, [1, 2], 3, 4)

>>> *head、b、c、d = range(5)

>>> 頭、b、c、d

([0, 1], 2, 3, 4)

以上がPython基礎学習まとめ(4)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート