最近 Python を勉強し始めたのですが、"Pythonチュートリアル"を読むと他の言語でいうところの配列らしきものを何の補足もなくリストと呼称していました。どのような思想で配列くらいポピュラーなものについてわざわざ慣習に逆らって別名をつけるのか気になったので、Google先生で軽く調べたのですが、そのことについて言及している記事を見つけられませんでした。
ご存知の方がいらっしゃればご教授いただけると幸いです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答5件
0
配列とリストはデータ構造の違いです。
Pythonには数値データを効率的に表現するためのarrayクラスがありますが、これは次のような性質を持ちます。
- 隣り合う要素がメモリ上で連続している
- 同じ型の変数しか保持できない
一方で、リストはデータ構造が全然違います。メモリ上で数値が連続している保証はありませんが、C言語の配列と違って、様々な型のオブジェクトを格納できます。この柔軟な機能を実装する方法の一つとしてリストと呼ばれるデータ構造がありました。
このような背景を考えると、リストと配列のどちらも扱うことが出来る言語であるならば、それらを分けて説明するほうが素直なような気がします。
投稿2018/02/17 01:05

退会済みユーザー
総合スコア0
0
なぜPythonでは配列をリストと呼ぶのでしょう?
に対しては、
- Pythonでは配列をリストと呼びません。
- Pythonでは配列構造のデータを配列(array)と呼びます。
- Pythonではリスト構造のデータをリスト(list)と呼びます。
となります。Pythonでは配列(array)もリスト(list)も[0]
や[1]
でアクセスできるのでどちらも他の言語の配列の様に見えますが、Pythonの中ではちゃんと区別されています。
投稿2018/02/17 01:47
編集2018/02/17 01:50総合スコア6149
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
ベストアンサー
どのような型やクラスにどのような言葉をあてるかは言語設計者の自由であり、こうしなければならないという物はありません。ただ、多くの人がわかりやすいようにと言う意図はあるかと思います。
色々調べたのですが、ちゃんとした文献見たいのが見つからなかったので、間違っている所があるかも知れません。
日本語で配列やリストと言われるもの、いわば、あるデータの順序づけられた集合、と言う物に対して、複数の呼び方があります。
- array (配列)
- list (リスト、一覧)
- sequence (シーケンス、順序、連続)
- vector (ベクトル、方向量) [数学から]
- tuple (タプル、順序組) [数学から]
- string (ストリング、紐、(データが文字の場合のみ特に)文字列)
一般英語のみではなく数学用語からの借用もあり、計算機科学の世界で歴史的に使われてきた経緯などによって、だいたい次のように使われています。
なお、順序づけがない場合はcontainer(コンテナ、容器)やset(集合)という言葉が使われます。
array
元々はarray data structure(配列データ構造)の意味で使われていました。つまり、arrayと言った場合はデータ構造そのものを示すと場合があることです。ただ、ここから転じてそのデータ構造で実装されているオブジェクトに対する型やクラスもarrayと呼ぶようになっています。
主な例
- C 配列(言語構造での型)
- C++ 配列(言語構造での型)、std::array
- Java 配列(言語構造での型)、java.util.Arrays(配列の操作用クラス)
- Python array(モジュール、ビルトインではない)
- PHP 配列(言語構造での型、連想配列も備える)
- Ruby Array
- JavaScript Array、Typed Array
そのデータ構造上、その言語における同じ型しか入らない、ということはありません。RubyのC言語実装では全てのオブジェクトがCレベルではVALUE
というたった一つの型であり、Array
はそのVALUE
の配列(つまりCでの配列)で実装されていますが、Rubyレベルで見るとVALUE
は様々なクラスのオブジェクトなので、Array
は全てのオブジェクトを混ぜて入れることができます。
list
listはarrayと違ってデータ構造ではなく、順序づけられた集合というものそのものになります。そのため、言語によっては実装によって複数用意されている場合があります。例えばJavaでは、ArrayList
、LinkedList
、CopyOnWriteArrayList
等です。そして、arrayはlistの一種であるとも言えます。
データ構造によらない配列のような物を示す場合にlistを使います。つまり、上述した配列(array)なのか連結リスト(linked list)なのか、それとも全く別の何かなのかを決め打ちしたくない場合にlistを使うと言うことです。先ほどのJavaではList
はインターフェースであって、その具体化クラスであるArrayList
やLinkedList
がわからないとどのような実装なのかはわかりません。
Pythonがlist
の名称を使ったのは、実装に対する縛りを入れたくなかったのかも知れませんが、array data structureではないPythonのlist
実装があるのかどうかはわかりません。
sequence
listににていますが、集合よりも順序を重視しているというものに使われている印象があります。言語で標準で用意されているのはScalaのSeq
ぐらいですが、通信などではsequenceという言葉を使うので、その関連で使われる事はあると思います。
vector
listとほぼ一緒ですが、元が数学用語です。
C++にはvectorがありますが、その実装は拡張可能なarray data structureです。元々の配列(array)と区別するためにvectorと別の名称を付けたのだと思われます。JavaのVector
(古いJava実装であり、現在は使われる事は無い)はC++の借用と考えられます。
それとは別に、数学用語として採用している物があります。RubyのmatrixライブラリにあるMatrix
と一緒に使うVector
は数学でのvectorです。
tuple
順序づけられた組です。1-tuple、2-tupleという表現が英語にはあり、数は固定であることが前提となるようです。2-tupleを別途pairと呼ぶ場合もあります。Pythonのほか、C++やScala等にもあります。
string
元々は「紐」の意味です。転じて連続した物を意味します。そして、いつから、そして、どこからかわかりませんが、文字が連続したものと(つまり、文字列)にたいしてstringと言うようになりました。ほとんどの言語で、文字列はstringの言葉を使っています。古くともCの時にはstringでしたが、いつからそう呼ばれていたのかは不明です。
stream
最後に、配列やリストとは異なる概念として、streamと言う物を紹介しておきます。これまでの物と違い、ただの流れ、順番に取り出せると言うことだけが重視されている物です。これまでの配列などとの違いは、無限を扱えると言うことです。例えば、自然数の列(1から無限に続く数列)はarrayやlistでは表現できません。これららは有限でしか考えていないからです。それを無限までできる(言ってみれば、どこかで止めないと無限ループになる)ように実装しているような物に対して、streamという言葉が使われる事があります。
投稿2018/02/17 05:06
総合スコア21754
0
Python のリストは真の可変長配列であり、Lisp スタイルの連結リストではありません。
(ポインタは連番なのね…https://docs.python.org/3/faq/design.html#how-are-lists-implemented)
データの本体はメモリ上に連番ではなくベクトルなどとして使った時のキャッシュ効率を最適化できません。
配列が必要になる場合numpyというライブラリのarrayを使います。
リストについて比較的わかりやすい説明へのリンク。
http://www.laurentluce.com/posts/python-list-implementation/
データ構造の比較が欲しければ。
http://www.geocities.jp/m_hiroi/light/pyalgo02.html
Javascirpt/RubyのArrayは、PythonのListとおなじのようですね。
投稿2018/02/17 02:33
編集2018/02/17 02:57総合スコア8562
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

退会済みユーザー
2018/02/17 03:28
2018/02/17 07:39 編集

0
違うものだからです。
C 言語で配列と呼ばれているものと全く同じかどうか確かめてください。
投稿2018/02/17 00:25
総合スコア28673
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/17 00:29
2018/02/17 00:45

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/17 01:46