リスト
Pythonのリストは、値の順序付けされたシーケンスを表します。 これらを作成する方法の例を次に示します。
他のタイプのものをリストに入れることができます
リストのリストを作成することもできます
リストには、さまざまなタイプの変数の組み合わせを含めることができます。
索引付け
角括弧で個々のリスト要素にアクセスできます。
太陽に最も近い惑星はどれですか? Pythonはゼロベースのインデックスを使用するため、最初の要素のインデックスは0です。
次の最も近い惑星は何ですか?
どの惑星が太陽から最も遠いですか?
リストの最後の要素には、-1から始まる負の数でアクセスできます。
スライス
最初の3つの惑星は何ですか? 私たちはスライスを使用してこの質問に答えることができます
planets [0:3]は、インデックス0から始まり、インデックス3を含まないまで続く惑星の要素を求める方法です。
開始インデックスと終了インデックスはどちらもオプションです。 開始インデックスを省略すると、0と見なされます。したがって、上記の式を次のように書き換えることができます。
終了インデックスを省略した場合、リストの長さと見なされます。
つまり、上記の表現は、「インデックス3以降のすべての惑星をくれ」という意味です。
また、スライスするときに負のインデックスを使用することもできます。
リストの変更
リストは「変更可能」です。つまり、リストは「インプレース」で変更できます。
リストを変更する1つの方法は、インデックスまたはスライス式に割り当てることです。
たとえば、火星の名前を変更するとします。
うーん、それは一口です。 最初の3つの惑星の名前を短くして補正してみましょう。
リスト関数
Pythonには、リストを操作するための便利な関数がいくつかあります。
lenはリストの長さを与えます
Sortedは、リストのソートされたバージョンを返します。
sumはあなたが期待するかもしれないことをします
以前にminとmaxを使用して、いくつかの引数の最小値または最大値を取得しました。 ただし、単一のリスト引数を渡すこともできます。
間奏:オブジェクト
私はこれまで「オブジェクト」という用語を頻繁に使用してきました。Pythonのすべてがオブジェクトであることを読んだことさえあるかもしれません。 どういう意味ですか?
つまり、オブジェクトはいくつかの物を持ち運びます。 Pythonのドット構文を使用してそれらにアクセスします。
たとえば、Pythonの数値は、虚数部を表すimagと呼ばれる関連変数を持ち運びます。 (非常に奇妙な計算をしているのでない限り、これを使用する必要はおそらくないでしょう。)
オブジェクトが持ち運ぶものに関数を含めることもできます。 オブジェクトに付加された関数はメソッドと呼ばれます。 (imagなど、オブジェクトにアタッチされている非機能のものは属性と呼ばれます)。
たとえば、数値にはbit_lengthというメソッドがあります。 ここでも、ドット構文を使用してアクセスします。
実際に呼び出すには、括弧を追加します。
余談:演習を行っているのであれば、実際にはすでにメソッドを呼び出しています。 演習ノートブックでは、q1、q2、q3などがすべて、check、hint、solutionと呼ばれるメソッドを持つオブジェクトです。
関数をヘルプ関数(例:help(max))に渡すことができるのと同じ方法で、メソッドを渡すこともできます。
上記の例はまったくあいまいでした。 これまでに見てきたオブジェクトのタイプ(数値、関数、ブール値)には、使用する可能性が高い属性やメソッドはありません。
しかし、リストには常に使用するいくつかのメソッドがあることがわかります。
メソッドの一覧表示
list.appendは、最後に項目を追加してリストを変更します。
上のセルに出力がないのはなぜですか? help(planets.append)を呼び出してドキュメントを確認してみましょう。
補足:appendは、惑星だけでなく、リストタイプのすべてのオブジェクトによって実行されるメソッドであるため、help(list.append)を呼び出すこともできます。 ただし、help(append)を呼び出そうとすると、Pythonは「append」という変数が存在しないと文句を言います。 「追加」名はリスト内にのみ存在します-maxやlenなどの組み込み関数のようなスタンドアロン名としては存在しません。
-> Noneの部分は、list.appendが何も返さないことを示しています。 しかし、惑星の値を確認すると、メソッド呼び出しが惑星の値を変更したことがわかります。
list.popは、リストの最後の要素を削除して返します。
リストの検索
地球は惑星の順にどこに落ちますか? list.indexメソッドを使用してインデックスを取得できます。
3番目になります(つまり、インデックス2-0インデックスで!)。
冥王星はどのインデックスで発生しますか?
ああ、そうです…
このような不愉快な驚きを避けるために、in演算子を使用して、リストに特定の値が含まれているかどうかを判断できます。
まだ取り上げていない興味深いリストメソッドがいくつかあります。 特定のオブジェクトに関連付けられているすべてのメソッドと属性について知りたい場合は、オブジェクト自体に対してhelp()を呼び出すことができます。 たとえば、help(planets)はすべてのリストメソッドについて教えてくれます。
「出力」ボタンをクリックすると、完全なヘルプページが表示されます。 リストには、_ eq_やiaddなどの奇妙な名前のメソッドが多数あります。 今のところ、これらについてあまり心配しないでください。 (おそらく、そのようなメソッドを直接呼び出すことは決してないでしょう。しかし、インデックスや比較演算子などの構文を使用すると、背後で呼び出されます。)最も興味深いメソッドは、リストの下部にあります(追加、クリア、コピーなど)。
タプル
タプルはリストとほとんど同じです。 彼らはちょうど2つの点で異なります。
1:それらを作成するための構文は、角括弧の代わりに括弧を使用します
2:変更できません(不変です)。
タプルは、複数の戻り値を持つ関数によく使用されます。
たとえば、floatオブジェクトのas_integer_ratio()メソッドは、分子と分母をタプルの形式で返します。
これらの複数の戻り値は、次のように個別に割り当てることができます。
最後に、2つの変数を交換するための古典的なStupid Python Trick™についての洞察があります。