
pythonのリスト、配列と並びによるデータの読み込みについて理解しにくいことがあるのでお尋ねします。以下のようなソース(抜粋)があります。
-----
data = [[] for i in range(SETSIZE)]
<省略>
for i in range(SETSIZE):
line = input()
data[i] = [int(num) for num in line.split()]
-----
この内容はdataというリスト(配列?)を仕立てて、リスト(配列?)であるdataに1行読み込んだ後、分割する。それをすべての行でやる、ということです。
そうしますと、dataというリストのサイズは2次元配列のようになってしまうようです。実際、data[10][3]というものをプリントすることもできます。そうなると、コードの最初の行でサイズをSETSIZEで指定したものとは違うように思われ、違和感があるのですが、どのように解釈したらいいでしょうか。SETSIZE=10で、10分割されたら、dataというリストは10x10の2次元配列みたいになります。しかし、冒頭では10と宣言しているわけですが。
この辺が腑に落ちないと多次元データの読み込みで勘違いしそうなのですが。
また、このプログラム動作のイメージですが、1行読んで分割する、1行読んで分割する、というリズムになっているようです。ファイルのセパレータ(空白とかカンマとかいろいろ)が変わった場合はどうなるでしょうか。
さらに、このプログラムを実行する場合にファイル指定はコマンドライン風になっています。
python abc.py < data.in で"data.in"というファイル指定します。それをinput()で受けているのでしょうか。それをやめてソース内にフルパスで読み込みファイル指定をした場合、どのようなコードになるでしょうか。
以上、python勉強中ですが、他の言語の仕様と比べてファイル入出力が独特な感じがして戸惑っております。
よろしくお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3
- 回答日時:
う~ん、1次元の配列を2階層重ねたのが
2次元配列のように見えるだけで
cの2次元配列とは別物なのだが
大丈夫だろうか?
#所謂ジャグ配列
また、動的配列は Java、c#、Javascript、・・・etcと
超が付くメジャーなデータ型です。
>それをやめてソース内にフルパスで読み込みファイル
>指定をした場合、どのようなコードになるでしょうか。
公式チュートリアルなら
https://docs.python.org/ja/3/tutorial/inputoutpu …
の7.2あたり。
他にもこれとか、いくらでもあります。
https://atmarkit.itmedia.co.jp/ait/articles/2104 …
入門書にもたいてい載ってますよ。
使ってみれば解りますが
メチャクチャ簡単です。
No.2
- 回答日時:
こんなに無関係な質問を一つの 質問にぶち込むと
答えるのが大変なんで、答える人が減っちゃうよ。
最初のリストの件
>data[i] = [int(num) for num in line.split()]
はリストの要素にリストを代入しているのだから、
リストのリストになるのはあたりまえ。
平坦なリストにしたいなら
dataは空のリストとして作成して、splitしたものを1個1個リストに
appendするべきです。
それと、pythonは配列は可変長の動的配列しか無いので
配列のサイズを予め確保するCやBASIC
の様なかき方は異様です。とても不自然です。
違和感はその辺から来ているのかも知れないけど
動的配列(リスト)の意味をもう少し理解した方が
良いかもしれません。
回答ありがとうございます。すみません、質問がいろいろ飛んでいるようなのですが、現場は1つです。エクセルのシートのような2次元的な広がりを持ったデータをpythonで読み込んで2次元配列に確保するということでした。多次元配列はないということですが、1次元配列data(しかも動的)であったとしてもdata[3][5]のように2次元配列を呼び出すようにしてデータを取り扱うことができるようなのでそれでいいのです(そういう意味で2次元配列があるのと同じ)。
質問が飛んでいるのがリダイレクトだと思いますが、リダイレクトしないでファイル名を指定して読み込むことをしたいと思っています。ファイルを開いて、読んで、閉じる、という動作ですね(他の言語では至極簡単)。私の持っているpythonのガイド本に書いてないのでお尋ねしたのですが、ネット検索したら出てきそうではありますが。
No.1
- 回答日時:
> data = [[] for i in range(SETSIZE)]
https://docs.python.org/ja/3/tutorial/datastruct …
要素数 SETSIZE のリストが作られます。
各要素は空のリストです。
data=[]
for i in range(SETSIZE):
data.append([])
とほぼ同等。
Pythonの「標準」では、多次元配列は無いので、リスト、タプル等のシーケンス型の入れ子で表現するのが常套手段です。
> ファイルのセパレータ(空白とかカンマとかいろいろ)が変わった場合はどうなるでしょうか。
セパレータは指定できます。
https://docs.python.org/ja/3/library/stdtypes.ht …
> python abc.py < data.in で"data.in"というファイル指定します。
「標準入力 リダイレクト」で検索を。
< を使った入力ファイルの指定は、別に変わったことではありません。
これは、Pythonの機能ではなく、OS(とシェル)の機能です。
そのため、C言語等の他の言語でも同じことができます。
よく入門書に「scanfで『キーボード』から入力」などとあったりしますが、正確には「scanfで『標準入力』から入力」 + 「『標準入力』は通常キーボード入力に割り当てられている」です。
> ソース内にフルパスで読み込みファイル指定をした場合、どのようなコードになるでしょうか。
下記チュートリアル等、解説しているサイト、参考書はたくさんあるので確認しましょう。
https://docs.python.org/ja/3.11/tutorial/inputou …
回答ありがとうございます。pythonでは多次元配列という考え方はなく、かつ常に動的である(あらかじめサイズを決めない)、ということですね。
動的ということであれば他の言語でもありますが、上限はあるはずですが、それを意識しないでプログラムを書くという風になっていると理解したいと思います。私としてはこれまで必要なメモリを確保してその中で仕事をする、という習慣でやってきたので違和感がありましたが。
標準リダイレクトは標準入力として受けるということですね。ただリダイレクトしないものもありますね。
python abc.py data.in
というものです。argv[]などで受け取るのでしょうか。
pythonの教科書は出版の数が大変多いのですが、私が見ている本(結構分厚い)には所望の機能が触れられておらずどうなってるのかなということだったのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- C言語・C++・C# pythonで外部のファイルを読み込む際のエラー 2 2022/04/12 19:22
- Visual Basic(VBA) vbaのループ処理について 6 2022/05/06 15:35
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラミングについて。 1つ...
-
gccを行ってもexeファイルが生...
-
c言語
-
visual studio 2022でのC#プロ...
-
C# DatagridviewにExcelシート...
-
mallocについて
-
C言語って古いですか?
-
C言語関数違いについて。
-
逆コンパイルと逆アセンブルの...
-
プログラムの実行時に'<'でリダ...
-
パソコン
-
CPUが16bitでも32bitOSでコンパ...
-
Python、プログラミングについ...
-
だれがとけるの?
-
バッチファイルで以下のような...
-
Notepad++の関数リスト表示の変...
-
VisualStudio2022でC言語プログ...
-
License='MIT' ってなんでmitな...
-
C言語 ストリームについて。
-
c言語でイベントフラグを使った...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語
-
gccを行ってもexeファイルが生...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
C++でデスクトップGUIアプリ開...
-
【C言語】全角文字の配列を、全...
-
Windows Formアプリからコンソ...
-
VisualStudio2022でC言語プログ...
-
C#でログファイルにファイルパ...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
VisualStudioでC++クラスを追加...
-
C言語について。
-
int16_t の _t は何?
-
プログラマー達は何故、プログ...
-
逆コンパイルと逆アセンブルの...
-
C言語の関数のextern宣言
-
c言語でイベントフラグを使った...
-
C言語 関数、変数の宣言について
-
[C言語]fputsとfprintfの違い
おすすめ情報