
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
バッチファイルで以下のような...
-
CPUが16bitでも32bitOSでコンパ...
-
gccを行ってもexeファイルが生...
-
c言語
-
VisualStudio2022でC言語プログ...
-
Windows Formアプリからコンソ...
-
visual studio 2022でのC#プロ...
-
C言語の関数のextern宣言
-
プログラマー達は何故、プログ...
-
PIC12F1822でLED調光器を作りたい
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
-
C言語について(初心者)
-
プログラミングc++を全く分か...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
DNCL(共テ用プログラミング言語...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHP 別ドメインへのファイル保存法
-
Resource id #3 と表示されま...
-
別ファイルの構造体の値を読み...
-
C言語でCSVファイルの行数を読...
-
自動で番号を振りたい
-
ヒアドキュメントの中のfor文
-
csvの内容を行単位で削除したい
-
ログファイルが一定行数を超え...
-
【PHP】csvファイルへの書き出...
-
配列同士の足し算のループ処理
-
掲示板のコメント削除
-
バイナリファイルの内容を、そ...
-
FortranのOPEN文
-
pythonのファイルの並びでの読...
-
配列をファイルに書き込む方法
-
文字列(丸数字)の文字化けに...
-
CSVファイルの最終行のデー...
-
複数行のデータのPOST処理に関して
-
doxygenを使用する環境について
-
PHPでCSVの一部の行を編集したい
おすすめ情報