A 回答 (9件)
- 最新から表示
- 回答順に表示
No.9
- 回答日時:
名前でアクセス という話からは離れてしまうけど
データ構造の中を巡回して個々のノードを処理する
ためのプログラムの骨格にはGOFのVisitorパターン
が知られてます。
この通りに書く必要はないのだけど、いろいろ考えさせる
ところが有って、参考になりますよ。
ネット上に無数に解説が有るし、書籍も沢山でてますが
これは一例。
https://refactoring.guru/ja/design-patterns/visi …
No.8
- 回答日時:
#6 にある「『変数』の実現方法」として辞書を使う言語もあるから, そのような実装方法を使えばここでいっている話も簡単になると思うんだ. そもそもこんなことをするなら「『変数名』も動的に変化する」ことを想定すべきだし, そうであるなら (なんらかの方法で) 辞書を使うというのはむしろ自然な発想だろう.
なお C にしろ C++ にしろ「実行時にオブジェクトの属性名情報を保持しません」という規定は存在しない>#7. そもそもそれは「言語の実装方法」であって「言語そのもの」と区別して考えるべきものなのだ.
No.7
- 回答日時:
例えば
class A:
def __init__(self,a=None,b=None):
self.a = a
self.b = b
となっていて
a = A(A(1,2),A(3,4))
なときに、a.a.aとかを辿るのはPythonだとdirを使えばできなくはないです。Pythonはオブジェクトの属性を内部的に名前をキーとした辞書で持っているので。
ただdirで得られるのは属性だけでなくクラスのメソッドやPython実行系が内部的に使っている関数などもあるので一筋縄ではいきませんけど。
なおpywin32(win32com)が内部でCOMを呼び出しているようにdirで全ての属性・関数等がリストできない場合もあるので、完全な処理は難しいです。
Pythonでプログラムを書いていてライブラリの内部データ構造を追いたいときなど苦労しています。
ちなみにC++言語などは実行時にオブジェクトの属性名情報を保持しませんのでデバッガなどで別途ソースコードの情報を管理していないと実行時に追いかけるのは無理です。
No.5
- 回答日時:
話が漠然としてきましたね。
名前付で木構造を作る手法としては
pythonでは属性と辞書が基本。
他にも名前付きタプルとか沢山あり、目的と使い方は其々違います。
私の示せるのはアルゴリズムの骨格くらい。
No.4
- 回答日時:
辞書の入れ子で階層作りたいって話なのかな?
def dive(obj, key="", level=0):
if isinstance(obj, dict):
for key in obj.keys():
dive(obj[key], key, level+1)
else:
print(level, key, obj)
objj = {"a": 1, "b": "abc", "c": {"d": 2, "e": "ff"}}
dive(objj)
インデントは全角空白で書いてあるので
半角空白4つとかに変換しないと動きません。
ご回答ありがとうございます。
辞書にこだわりはありません。
また階層を作りたいのではなく、階層を辿りたく投稿させて頂きました。
先の説明で追加補足させて頂きます。
AはB+Cで構成されています。
これを特定の機能(関数?)で、A = ['B','C']として取得します。
BはD+E+Fで構成されおり、こちらも同様の関数で B = ['D','E','F']
として取得、Cも同様の構成をしており同じような内容で取得。またその配下にあるD、E、Fやその配下にあるものも全ての要素がなくなるまで同様の方法で辿って情報を取得したいと思っています。
ちなみに構成及び階層は状況により変化する事を前提としています。
初回のAの要素は特定の関数で当然取得できますが、取得した要素に対して同様の関数を使用してそれを構成する要素を取得し、更にその取得した要素に対して同様の関数で要素を取得を繰り返し処理で階層を辿り、その階層数と内容を取得したいのですが方法がわかりません。
説明が足りないかも知れませんが、何かアドバイスいただけると助かります。
No.3
- 回答日時:
文章はあいまいにならないように書こう.
例えば「Aの変数の中にはBとCといった文字情報が入っており」では少なくとも
・「A の変数」ってなに? 「変数A」とはどう違う?
・「BとCといった文字情報」とはどのようなもの? 「文字列」ではなく「文字情報」と書いているということは, もちろんその「文字情報」というのは「文字列」ではないんだよね? どのようなもの? そして, その「B と C といった文字情報」とやらと「B の変数」とやらには, どのような関係がある?
という疑問がある.
そもそもなんでそんな構造になっている? どうして辞書じゃダメなの?
「A の変数」=「変数A」という認識で問題ありません。
説明がわかりづらかったようですので再度追加します。
AはB+Cで構成されている。A = ['B','C']
BはD+E+Fで構成されている。B = ['D','E','F']
Cも上記同様で異なる構成となっている。
DもEもFも同様。
この状況でAを構成するすべての内容と階層を取得するのが目的です。
(構成要素は変動します)
製品で例えれば、以下のようなイメージ
製品AはモジュールBとモジュールCの組み合わせで構成されている。
モジュールBは、部品DとEとFで構成されている。
モジュールCは…で構成されている。
部品Dは…で構成されている。
製品Aを構成しているすべての内容を取得したいのです。
製品A
L モジュールB
L 部品D
L …
L …
L 部品E
L …
L 部品F
L モジュールC
L 部品…
L 部品…
L モジュール…
製品を例にしましたが組織図でもイメージがつくかと思います。
やりたいことは最上位を構成する要素をすべて取得したいです。
要素は変動するものですが、辞書でそのようなことができるのでしょうか。
No.2
- 回答日時:
「変数の中に複数の変数が入っていて、その変数にも更に変数が入っています。
その中にも更に変数が。」って, どのような状況なの?そのような状況を, あなたはどのようにして作った?
正しくは変数ではありません。
Aの変数の中にはBとCといった文字情報が入っており、Bの変数にはDとEとFの文字情報が、Cの変数には…といったような状況でAからその中に入っている情報をすべて取り出したいのです。
ディレクトリを走査するイメージと似ているかと思いますが、ディレクトリの関数でお答えいただくと困るため、変数の中に変数がといった表現をしました。
No.1
- 回答日時:
こんなイメージ?
def dive(level, obj):
iterable = hasattr(obj, "__iter__")
isSingleChar = isinstance(obj, str) and len(obj) == 1
if iterable and not isSingleChar:
for ele in obj:
dive(level+1, ele)
else:
print("level = " + str(level), obj)
python では文字列は iterater で辿ると無限階層になってしまうので
文字を一文字に分解したところまでで止めてます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのDjangoでHTML内で変数を利用したいです 3 2022/05/15 15:33
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- Excel(エクセル) エクセル、日々の集計整理方法。(再送です。) 5 2022/10/02 00:19
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- 高校 対数方程式につきまして 4 2022/05/05 07:55
- その他(プログラミング・Web制作) python変数の使い方について 2 2023/06/16 17:32
- その他(プログラミング・Web制作) Pythonの変数 1 2023/06/16 17:40
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 工学 状態変化の計算について教えてください。 2 2023/05/22 01:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
現在位置より2つ上のディレク...
-
UWSCでファイルのアップロード...
-
【PHP】declare命令で”Fatal er...
-
aspのページが表示できません
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
[ ディレクトリ '.' は書き込み...
-
makefile でファイルをコピーす...
-
ファイル選択ダイアログで選択...
-
C言語でのディレクトリ作成につ...
-
visualstudioでc#のdllができない
-
頻繁にDBへアクセスするページ...
-
FTPコマンドでディレクトリごと...
-
フォントの色を変えるには?
-
PHPの設定で、 エラーが発生し...
-
onedrive にexcelファイルをア...
-
Linux:PHPでTELNETによるSMTP...
-
ListViewコントロールでサムネ...
-
ボタンのクリック数を合計保存...
-
ワードプレス、Contact Form 7...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FTPコマンドでディレクトリごと...
-
Subversionのリポジトリの削除
-
バッチを用いたフォルダの自動移動
-
CFileDialogの最初のディレクト...
-
visualstudioでc#のdllができない
-
ファイルアップロードに関して...
-
現在位置より2つ上のディレク...
-
makefile でファイルをコピーす...
-
fopenでファイルが開かない場合...
-
rmdirでフォルダが消せません
-
絶対パス?絶対アドレス?意味...
-
VB.NET 最下位のディレクトリ名...
-
コマンドプロンプトを指定のデ...
-
VB2008でFTPでのディ...
-
DLL のロードの順序
-
MkDir関数
-
ファイル選択ダイアログで選択...
-
図に示す階層構造で,現在のデ...
-
[ ディレクトリ '.' は書き込み...
-
JAVA内で複数のファイルを削除...
おすすめ情報