Pythonのお勉強 Part72

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 03c5-hEBs)
垢版 |
2023/12/27(水) 15:42:25.63ID:sVIMH2iW0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
エラー文(勝手に省略orスクショうp等の横着禁止)と
おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。

★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
 ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/
※前スレ
Pythonのお勉強 Part71
https://mevius.5ch.net/test/read.cgi/tech/1695168821/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (ワッチョイ a3c5-hEBs)
垢版 |
2023/12/27(水) 15:43:24.25ID:sVIMH2iW0
●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その59
https://mevius.5ch.net/test/read.cgi/tech/1689241721/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ### ?
2023/12/28(木) 00:18:55.96ID:PfV0RGQH0
json.loads()で読み込んだすっごい深い階層のどこかにある特定のキーの中身を取り出すのはどうしたらいいだろう
2023/12/28(木) 07:41:51.96ID:RaV9XYpTM
前スレWindowsのショートカット(.lnk)はリンク先を呼び出すスクリプトだから
直接処理したいならLinuxと同じようにシンボリックリンクを作らないとね
2023/12/28(木) 07:46:51.07ID:RaV9XYpTM
って書いたけどバイナリ解析して取り出でWshShortcut呼ぶ必要が無くなるな
6デフォルトの名無しさん (ワッチョイ a372-Vioh)
垢版 |
2023/12/28(木) 09:54:35.25ID:GpULO4aD0
>>3
スタック、キュー、再起
好きなの選べ
2023/12/28(木) 10:03:58.31ID:3LJz5hCH0
BeautifulSoupだと階層無視して検索とかできるけど、
あんな感じでキーは判ってるので構造に対して柔軟に取得したい

再帰で辞書かリストか判断しながら辿っていけばいいのは判るけど、
自分でいちいち書きたくない
2023/12/28(木) 12:00:13.88ID:h0GDpcwsH
>>3
glom
https://glom.readthedocs.io/en/latest/tutorial.html
2023/12/28(木) 12:01:30.42ID:h0GDpcwsH
>>3
glom
https://glom.readthedocs.io/en/latest/tutorial.html
2023/12/28(木) 12:23:16.61ID:3LJz5hCH0
いいね
globみたいに**で飛ばすのか
リストで返ってくるのがちょっと意外だった
2023/12/28(木) 16:10:11.78ID:Cpi03Itga
古典的な方法として正規表現があるけど
それではだめなの?
2023/12/28(木) 16:30:57.91ID:3LJz5hCH0
htmlのスクレイピングでも、こんなもん直接正規表現で抽出した方が早い、
という局面はよくあるけど、回り道して正攻法でやった方が結局うまく行く
2023/12/28(木) 22:45:10.41ID:EC2vWFQE0
XPathを模したJSONPathってのがあって
Python用のモジュールもあるからそれのが潰し効く
2023/12/31(日) 23:26:27.13ID:zAD+40EH0
Ruby なら、dig で、
配列はインデックスで、ハッシュはキーで指定できる

require 'json'

# 改行を削除する。削除しなくても同じ結果
json_str = <<'JSON'.delete( "\n" )
[{"あ":[{"い":1}, "x"]}]
JSON

p json_obj = JSON.parse( json_str )
#=> [{"あ"=>[{"い"=>1}, "x"]}]

p json_obj.dig( 0 ) #=> {"あ"=>[{"い"=>1}, "x"]}
p json_obj.dig( 0, "あ" ) #=> [{"い"=>1}, "x"]
p json_obj.dig( 0, "あ", 0 ) #=> {"い"=>1}
p json_obj.dig( 0, "あ", 0, "い" ) #=> 1
2024/01/01(月) 02:21:58.28ID:/RwaAIWF0
今からpyでGUIやるとしたら何がお勧め?
ちなみに社内利用のツール作りたい
2024/01/01(月) 05:29:55.18ID:8JDkd5n2M
PythonはGUIがとても弱い
これだけ流行ってもPythonでゲーム作る人少ないでしょう
2024/01/01(月) 09:31:16.04ID:FY+JXkGU0
強弱は関係ない
2024/01/01(月) 09:41:18.11ID:LVCnPGal0
GUIは簡単にやれるならやってみようと手を出したけど、
全然簡単じゃない上にやりたいのと違うのしかできない
どうせ自分しか使わないならGUIにする必要もない
ということで見限ってる
2024/01/01(月) 10:14:09.09ID:Y+kcGNY5r
>>17
ライブラリが弱いって話だから大いに関係ある
2024/01/01(月) 16:58:47.27ID:TV87FrAo0
tkinterかPysimpleGUI
2024/01/01(月) 17:21:32.37ID:rZ1QEI030
目指すものによる
pygame(SDL)やEel(HTML)なんてのもあるし
2024/01/01(月) 20:04:03.89ID:yqkPDDz60
fletが好き
2024/01/02(火) 05:16:39.05ID:H+L4L0Nu0
copilotすげーな
もっと短くできない?って聞くと毎回短くなって勉強させてくれるわ
2024/01/02(火) 10:17:40.38ID:rCzOacgf0
pysimpleguIってデフォルトのフォントサイズ変えらんないの?
いちいち設定するのめんどくせー
2024/01/02(火) 10:31:53.39ID:rCzOacgf0
あ、出来たわ
サイコー!
2024/01/02(火) 10:36:02.44ID:YHSrr3CM0
UIが欲しい訳でもないんだよな
設定やら入力はファイルから読み込むとかの方が楽に決まってる
動いてる最中に現在のステータスを表示させたり、
オプションをリアルタイムで変更したりしたい

CUIだと、コンソールにスクロールして表示されるのを目で追うとかになるし、
リアルタイムでの変更もできない
2024/01/02(火) 17:06:08.58ID:YHSrr3CM0
list1がインデックスのリストで、その[0:2]の内容をインデックスとした
list2の一部を取り出したい時はどう書いたらいい?
2024/01/02(火) 17:24:28.33ID:yAberLu60
>>26
>動いてる最中に現在のステータスを表示させたり、
>オプションをリアルタイムで変更したりしたい
両方ともCLIでもできるでしょ
2024/01/02(火) 17:28:18.91ID:yAberLu60
>>27
[list2[i] for i in list1[0:2]]

どういう形で取り出したいかとか
取り出した後にどう使いたいかで適切な方法は変わる
2024/01/02(火) 19:39:00.00ID:YHSrr3CM0
ああ、それだ
どうやってもループ的になるのは避けられないんだな
1行で書けるというだけで
2024/01/02(火) 21:01:40.65ID:YHSrr3CM0
def fill_rcsv(field, name, position):
  candidate = search(name, field)
  for position in candidate:
    fill_rcsv(field, name, position)

要素だけ書くとこんな感じの再帰呼出しで、
複数回呼ぶとうまくいかない
  for position in candidate[0:1]:
みたいに1回だけにするとばっちり動く

再帰で何かが上書きされてるんじゃないかと疑ってるけど、
そんな筈は無いし、何がおかしいんだろう
2024/01/02(火) 21:34:01.44ID:MhnXHP5rr
>>30
numpy使えば
arr2[arr1[0:2]]
2024/01/02(火) 21:36:03.53ID:MhnXHP5rr
>>31
何やりたいのか知らないけど引数のpositionが意味ないからそりゃ動かないだろうな
2024/01/02(火) 21:48:28.13ID:YHSrr3CM0
なんで意味ないの?
35デフォルトの名無しさん (ワッチョイ b18d-nK/n)
垢版 |
2024/01/02(火) 21:51:12.00ID:gERpN8hs0
map(lambda x: list2[x], list1)
2024/01/02(火) 22:23:44.72ID:YHSrr3CM0
実際には終了条件の為にrestという変数も渡してる
fill_rcsv()の中でrest.pop(0)する
最初から空なら終了

呼び出しの時のrestを、rest.copy() にするだけで挙動が全然違う
再帰の時の引数にリストを渡した時の呼び出し元に対する影響がよく判らない
2024/01/02(火) 22:56:33.18ID:iDasqM+7M
>>36
いや再帰どうこうの以前に>>31見ただけでなんか設計おかしいのがわかるでしょ
candを計算するのにname, fieldしか使ってないのに
変数名positionをcandから取り出したやつで上書きしてイテレートしてる
2024/01/02(火) 22:57:38.80ID:iDasqM+7M
副作用がばりばりあってそれでも想定通り動くコードなのだとしたらその部分だけ見せてもわかるわけないしどっちにせよおかしい
2024/01/02(火) 23:06:10.04ID:YHSrr3CM0
省いちゃったけど、positionはfieldを更新するのに使ってる

ループが1重ならちゃんと動作するので、設計自体はおかしくないんだけど、
2回目以降を呼ぶ時に前回の影響が何故か残ってるとしか思えない
2024/01/02(火) 23:27:49.93ID:tsCK1S6o0
>>36
>呼び出しの時のrestを、rest.copy() にするだけで挙動が全然違う
そりゃそうでしょ

>再帰の時の引数にリストを渡した時の呼び出し元に対する影響がよく判らない
再帰関係ないじゃん

引数にリストを渡した時の呼び出し元に対する影響がよく判らないのに
設計自体がおかしくないと思うのが間違い
2024/01/02(火) 23:32:04.47ID:YHSrr3CM0
そりゃそうでしょ、というのが全く実感できないんだよな
なんで動かないのか不思議で仕方ない

その根拠を知りたくて質問してるのに、
そんなの動かないよーだけでは同類
2024/01/03(水) 00:11:45.62ID:1+Mz/XnMM
質問の仕方でpython弱いのが分かるレベルなのに
開き直って甘えてんなあ
teratailとかでそんな聞き方したらぶち殺されるぞ
あまりスレ民の優しさに甘えるなよ
2024/01/03(水) 00:20:02.95ID:WAHmHtMV0
Elixir の再帰では、リストの要素をすべて走査したら終了する。
引数には、accumulator・蓄積変数を持っている

リストを、[ head | tail ] に分解して、headを処理する。
tailを引数に渡して再帰する

終了条件は、tailが空[ ]になった時

[1, 2, 3] → [1,[2,3]] 1を処理
[2,3] → [2, [3]] 2を処理
[3] → [3, []] 3を処理
[] → 終了
2024/01/03(水) 00:24:10.82ID:tiof+l/G0
再帰呼び出しがうまくいきません
・終了条件のための引数restは省略しています
・引数positionの参照は省略しています
・引数fieldの更新も省略しています
・引数positionの算出も省略

重要な部分が省略されてて不具合なんて分かるわけがない
2024/01/03(水) 00:30:19.66ID:WAHmHtMV0
Ruby のオブジェクトは、shallow copy だから、参照しかコピーされない。
内側のオブジェクトはコピーされずに、同一オブジェクトを使い回す

deep copy は難しい。
Python もそうなのかも?
2024/01/03(水) 00:31:22.73ID:LcImUTxt0
添削を依頼してる訳じゃないんだよな
400行のコード貼ったって誰も読まない
ループじゃ無ければ動く、という部分をとっかかりに
はまりポイントが思いつく人だけ反応してくれればいい
2024/01/03(水) 00:32:41.65ID:1+Mz/XnMM
今後もプログラミング続けるなら、まず質問する時に、後出し後出しで事故ってるとこをどんどん出すのはやめたほうがいい
教える側が普通に想像する事態について丁寧に説明しても、あとからあとから「いや、実はこうなんで」って出てくるなら、
どんな初心者の変なコードにも対応できる一般論や抽象的な話しかできなくなってしまう
そうなると有意義なアドバイスは難しい

それとは別に、ごくまともな指摘をもらっておいて
いや俺はわかってる、設計はあってる、でもなんかおかしい、俺は悪くない みたいなことを言わないほうがいい ムカつくし、単に嘘をついてるから
断片的な話だけで完全に設計間違ってることがわかるレベルで間違ってる
2024/01/03(水) 00:39:15.47ID:LcImUTxt0
丁寧に説明してないやんw
2024/01/03(水) 00:51:01.69ID:KdVdKcTt0
参照渡しと値渡しの概念すら理解してないんだろ多分
2024/01/03(水) 00:57:56.55ID:/ozK3YEK0
高卒SES共が喚きおるw
2024/01/03(水) 01:11:16.06ID:LcImUTxt0
結論としては、deepcopy()で解決した
ピンと来た人いるかな?
2024/01/03(水) 01:26:32.45ID:1Vhp1t1B0
>ループが1重ならちゃんと動作するので、設計自体はおかしくないんだけど、
>2回目以降を呼ぶ時に前回の影響が何故か残ってるとしか思えない
ここジワるな
2024/01/03(水) 01:56:55.37ID:LcImUTxt0
リストをコピーして渡したいだけなのに、別モジュールのimportまで要ると思わんやん

ぐぐって見つかる再帰呼び出しの例は、再帰の魔法みたいな部分を強調したいので、
そんな面倒くさいケースは紹介しない

list.copy()というそれっぽいものが用意されていて、
大抵はそれでちゃんと別物として扱ってくれるので疑ってなかったのが敗因

浅いコピーと深いコピーの違いはぶっちゃけまだよく判ってない
2024/01/03(水) 03:27:46.18ID:1+Mz/XnMM
ここまでで二重配列って説明一切出てないけどどうやってバグらせたかはわかるよ
そもそも再帰なのに入れ子のミュータブルをdeepcopyで渡さないといけない時点で書き方確実に間違ってるからどうでもいい
2024/01/03(水) 09:36:00.75ID:Hn1laHOqd
再帰関数の中でディープコピーとは
ヘビーなモノ作ってるねぇ
2024/01/03(水) 10:38:21.88ID:ddCxQkeE0
やべーな…
57デフォルトの名無しさん (ワッチョイ b1d7-jLm+)
垢版 |
2024/01/03(水) 12:42:33.64ID:8a8+YZHz0
>>53
>浅いコピーと深いコピーの違いはぶっちゃけまだよく判ってない
もう答え出てるやん
2024/01/03(水) 15:04:21.23ID:g3N633bF0
荒っぽく説明すると
デスクトップのショートカットだけコピーするのが浅いコピー
ショートカットの中身までコピーするのが深いコピー
2024/01/03(水) 15:11:36.20ID:EtnQA6qj0
1. listを渡す
2. list.copy()した結果を渡す(shallow copy)
3. list.deepcopy()した結果を渡す(deep copy)

ショートカットだけコピーするのは1じゃないか?
2024/01/03(水) 16:16:50.31ID:TWtcN/3Cr
だろうね
再帰でイミュータブル渡すならまずコピーでなく参照を渡して済むことがほとんどだし
そうじゃないならリストで渡さずタプルにして値で渡せばいい
あらゆる意味で変
61デフォルトの名無しさん (ワッチョイ e57c-lTP4)
垢版 |
2024/01/03(水) 16:17:41.41ID:9d0scbEX0
>>26
遅レスだけどWebで良いやん
streamlitみたいなのでサクッと作れば良くね?
62デフォルトの名無しさん (ブーイモ MM19-MN+v)
垢版 |
2024/01/04(木) 08:43:33.03ID:Bfa1kVrNM
>>61
これ
もうネイティブアプリの時代じゃないんだよな
2024/01/04(木) 11:09:29.68ID:TXiVOLS30
webなのかー
ブラウザでやること自体のメリットはあんまり感じないけど、
ハードルが低いなら巻かれてみよう
2024/01/04(木) 12:24:20.61ID:JYOy60Zk0
俺はネイティブ派だけどね
やはり速度的に全然違うし
ただプログラミングスタイルとしてネイティブは終わってる
2024/01/04(木) 12:44:57.47ID:sQEt7tpm0
かないしことにwebについていけてない俺
2024/01/04(木) 12:46:29.15ID:TXiVOLS30
入力と出力の部品が一揃いあって使い慣れたものが目の前にあるじゃろ
という話なんだろうな
いろんなプラットフォームを意識する必要もない
2024/01/04(木) 12:49:45.92ID:TXiVOLS30
組み込みとか、金融とか、PGの仕事のジャンルという大きなくくりの一つとして、
webがあるんだよな
どこかの会社のホームページ作る仕事がそんなにあるの?
という話でもないらしい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況