Pythonのお勉強 Part70

■ このスレッドは過去ログ倉庫に格納されています
2023/03/04(土) 00:18:00.31ID:dUl31UkL0
↑スレ立てる毎に減るので、減ってたら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/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2023/04/20(木) 08:09:16.58ID:uCwEPaTc0
ワッチョイ消してるやつの相手すんなよ...
2023/04/20(木) 09:18:43.87ID:Gkc0C+yM0
IPは消してたけどワッチョイ消したことはないな
なんだろう
うまい喩えが見つからないけど、死ぬほど恥ずかしい
2023/04/20(木) 09:26:39.56ID:dFvm1wua
>>203
いや1レス目からもう十分伝わってますよ
>メソッドチェーン化したいという理由があるのかもしれないけど
>それはPythonのやり方ではない
というあなたの設計思想は >>177
誰が見ても違和感でしかないですよ
標準ライブラリでその恩恵を預かりながら自作では徹底してforループ
決められたこと以外は出来ない
狂信とまではいいませんけど、頑張ってください
207Jun (ワッチョイ 7fda-F1k0)
垢版 |
2023/04/20(木) 23:59:27.49ID:ohUBo7l50?2BP(0)

Pythonはシンプルな言語だがオモチャでない。
2023/04/21(金) 01:14:13.92ID:KCdL0+Bq0
いろいろ目をつむらないとシンプルに扱えないから
玩具の品質には到達していないのはわかる
2023/04/21(金) 01:27:36.69ID:fM6D7Jjb0
おもちゃとは考えが逆だろう
最小のコードで複雑なことができたら楽しい
pythonは暗黙でいろんなことが決まるのを避けるので、何かするならきっちり指定する
きっちり指定してきっちり動いても何も面白くはない
210Jun (ワッチョイ a6da-Fj9N)
垢版 |
2023/04/22(土) 23:31:49.33ID:ZUue34CB0?2BP(0)

Python以外で何かいい言語はありますか?
2023/04/23(日) 00:04:54.40ID:DlHbN44X0
GoやってGoの仕事に就くとしばらく食える
2023/04/23(日) 00:11:46.19ID:Y0v5ztu40
pep8とzenくらいやっとけばMonkになれる
2023/04/23(日) 00:12:41.43ID:Y0v5ztu40
所謂monkに文句無し的な
2023/04/23(日) 00:13:34.99ID:Y0v5ztu40
ふふってなった ちんこ痒い
2023/04/23(日) 01:40:11.94ID:RcbzEQSV0
香ばしいレスが多いな
216Jun (ワッチョイ a6da-Fj9N)
垢版 |
2023/04/23(日) 02:06:25.42ID:F2K2mK+f0?2BP(0)

Go言語はCから学ばなくても修得できますか?
2023/04/23(日) 02:32:01.30ID:X2+aRqhz0
Rustとまちがってない?
まーどの高級言語も先にCやってた方がだんぜん理解深まるけどね
218デフォルトの名無しさん (ワッチョイ a633-F6q8)
垢版 |
2023/04/23(日) 14:44:10.81ID:U/RsZCHU0
>>217
今は順番が逆
2023/04/23(日) 15:34:25.39ID:fUzoPDLKa
文系でウェブ系なら、Ruby on Rails 1強。
米国年収でも、Rails, AWS Solution Architect が13万ドル

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5〜7

PHP : 5
Dart : 4.4

日本では、バックエンドの求人倍率が数倍で、
フロントが0.5倍と、10倍の開きがある。
フロントは供給過剰で、低価格競争になっている

つまり欲しい人材は、Rails, Linux, Docker, AWS が出来る香具師

YouTube で有名な雑食系エンジニア・KENTA は、
キャリアパスを、Rails → Go のみと言ってる

理系ならPython で、大学院数学科とか、AWS 機械学習の資格など
220Jun (ワッチョイ a6da-Fj9N)
垢版 |
2023/04/23(日) 23:53:51.08ID:F2K2mK+f0?2BP(0)

PythonとGoを両方やることにします。Goも教材がたくさんありますね。現在、人気の
言語ですね。
2023/04/24(月) 00:07:55.90ID:HkcOJ3w60
結局ベースにCがあるんだよな
Cでも書けることを、より簡単に、より堅牢に、より保守性高く、書き直しているに過ぎない

そもそもCで書けんわというアーキテクチャーが登場するまで、Cは残り続ける
222Jun (ワッチョイ a6da-Fj9N)
垢版 |
2023/04/24(月) 23:39:25.46ID:xypANbuI0?2BP(0)

C言語。デニス・リッチーですか。長寿の言語ですね。WindowsOSもC言語で書かれて
いるんですね。
2023/04/25(火) 13:51:41.19ID:FPTpqTcN0
goやpythonよりもPHPやったほうが良い
2023/04/25(火) 22:11:51.74ID:+HdKZSwh0
Webアプリ以外でもPHPで書くの?酔狂やね
2023/04/26(水) 12:04:22.99ID:cIPQx0Y6a
MLでPHPとPython使うだろうjk
2023/04/26(水) 18:39:27.90ID:JavlcTjg0
perlで作ったツールを移植してるけど

if key3 not in d[key1][key2]:
 d[key1][key2][key3] = {}

みたいなのがたくさん追加で要る
しかもループの中で毎回評価してて気持ち悪い
autovivificationを使わずに多次元辞書をすっきり書けないものか
227デフォルトの名無しさん (ワッチョイ 6646-0EuI)
垢版 |
2023/04/26(水) 21:19:22.89ID:vPfd2wHV0
暗黙の初期化のような、うちうちのノリが多くて、Perlは嫌われたんだろ。
2023/04/26(水) 21:33:02.57ID:JavlcTjg0
keyが存在するかどうかのチェックはどうせ毎回やってるんだから同じことか
2023/04/26(水) 22:20:00.88ID:VuAuol7y0
defaultdict
2023/04/26(水) 22:29:32.74ID:JavlcTjg0
from collections import defaultdict
d = defaultdict(dict)
d['a']['b']['c'] = 1 # KeyError: 'b'

2次元までなら
2023/04/26(水) 22:43:05.12ID:k7DLXEM30
辞書をそんなネストしないといけない時点で根本的に設計がおかしいのでは?
2023/04/26(水) 22:47:14.72ID:VuAuol7y0
def deepdict(): return defaultdict(deepdict)
d = deepdict()
d['a']['b']['c'] = 1
もっとうまく書けるかもしれんけど
2023/04/26(水) 22:52:56.90ID:JavlcTjg0
dictだけ続くならいいけど、listが混ざったりするんだよな
2023/04/26(水) 22:56:15.01ID:VuAuol7y0
後出しは書く必要ない
任意の関数渡せるんだからスキにしたらええ
2023/04/26(水) 23:03:54.93ID:JavlcTjg0
a[1] がlistなのかdictなのか判らんという時点で、pythonでは自動は無理なんだよな

l = []
l[1] = 1 # IndexError

perlはこれが出来るというのも、かなりの飛躍がある
236デフォルトの名無しさん (ワッチョイ a633-ASru)
垢版 |
2023/04/26(水) 23:05:17.48ID:sUnbpfBB0
jsonで受け取ったデータをデコードしてそのまま使ってるとかじゃないの
2023/04/27(木) 16:04:02.47ID:BTOHfqgT0
if m := re.search(パターン1):
 処理1
elif m := re.search(パターン2):
 処理2
else
 処理3

みたいに書いていたものを、:= を使わないように変更
m := re.search(パターン1)
if m:
 処理1
else:
 m := re.search(パターン2)
 if m:
  処理2
 else
  処理3

気持ち悪い
elifは展開するともともとこういうものだから仕方ないのか
2023/04/27(木) 16:11:37.78ID:Noc5t00Md
assignment expressionが必要になった理由がそれだから仕方ないね(pep572)
2023/04/27(木) 16:43:35.35ID:SfEpe4Pu0
m = None
def search(pat):
____global m
____m = re.search(pat, str)

こういうのを直前に書くとか
2023/04/27(木) 16:50:03.39ID:BTOHfqgT0
re.searchは別関数にしたいとは常々感じてる
m.groups() を返してくれると有り難い
マッチしなかったら[]を返すようにすれば、ifにそのまま入れられる筈

なんで正規表現回りこんなに不便なんだろう
241デフォルトの名無しさん (ワッチョイ a633-ASru)
垢版 |
2023/04/27(木) 18:30:59.89ID:5qwnrWFd0
競プロで複数行の標準入力を受け取るとき、stdinを使った方がだいぶ早いみたいな記憶があったんだけど、今はだれも使ってない
これは自分が何か記憶違いをしてる?
242Jun (ワッチョイ a6da-Fj9N)
垢版 |
2023/04/27(木) 23:58:21.80ID:CoNlHc/S0?2BP(0)

Pythonはオブジェクト指向とデータ隠蔽の所が面白い。
2023/04/28(金) 00:38:35.47ID:fNFGtOF30
ハードウェアやdbの設計やらセキュリティやら色々大変だよ
まじで全部はやれそうに無い
2023/04/28(金) 01:17:05.61ID:0Z+HC9sf0
>>241
だれも?
まわりみんなPowerShellユーザなの?
245241 (ワッチョイ a633-F6q8)
垢版 |
2023/04/28(金) 07:46:56.36ID:X3vhIzka0
2系の時の話だったかもしれん
246241 (アウアウウー Sa21-F6q8)
垢版 |
2023/04/28(金) 09:49:13.94ID:gpbxWykPa
>>244
どういうこと?
247デフォルトの名無しさん (アウウィフ FF21-YWDm)
垢版 |
2023/04/28(金) 10:58:04.57ID:pksuSfeeF
>>240
matchなんか使うからだ
findallで良い
2023/05/03(水) 19:16:59.83ID:LjnRJYKu0
個人でプログラムしている程度の素人からの質問です
dataclassでクラスの作り方を覚えたら従来のクラスの作り方を覚える必要ってありますか?
dataclassでできないことがイマイチ分からなくて・・・
2023/05/03(水) 20:31:00.66ID:dRzFRHH60
setdefaultが便利なことに気付いた
2023/05/03(水) 20:42:31.43ID:jsxN4Jfn0
>>248
ひとのコード読まないならいいんじゃない?
@dataclass使わずに自前で実装している事のが多いから
内包表記にもいえるけど同等のベタなコードも知ってたほうが
他人のコードの理解が進むし自分のコードの幅も広がるとは思う
2023/05/04(木) 03:58:07.49ID:1n3OCeKB0
>>250
ありがとうございます
従来のクラスは読める程度にしておいて自分で作るときはデータクラスにしようと思います。
引数をいちいちself.hoge = hogeって列挙していくの面倒で・・・
2023/05/04(木) 10:26:11.29ID:Oq6zT20d0
書く量はあんまり変わらないからなあ
reprとか書くならその分減る
253デフォルトの名無しさん (ブーイモ MMff-1K07)
垢版 |
2023/05/08(月) 15:08:20.54ID:PDbtS8P/M
すまん。パイソン歴3年とリクルートエージェントで言ってしまった(笑)
本当はvscodeと言いたいが、実はGoogleコラボしか経験がないです。(笑)
今からvscodeでパイソン歴3年は何を言えばいいですか?
2023/05/08(月) 15:26:52.63ID:OygwxwuO0
結果をリストに入れて副作用で返したい

def func(list):
# 処理
list.clear()
list.extend(result)

こんな感じでできるけどどう見ても汚い
副作用がそもそも汚いけど、もう少し何とかならないか
2023/05/08(月) 15:54:19.13ID:N55ghYlR0
>>254
関数にはリストを渡さずに格納したい結果だけを返して、
リストに入れるのは呼び出し元の方でやるのが一般的じゃないかな
2023/05/08(月) 15:57:26.54ID:OygwxwuO0
戻り値には成功かどうかを返したい
2023/05/08(月) 16:12:14.22ID:NZN2JSTa0
何がしたいかよく分からないけど成否とリストのタプルを返せばええやん
2023/05/08(月) 16:13:54.12ID:OygwxwuO0
:= を使わずにif func()に使いたい
2023/05/08(月) 16:23:33.58ID:N55ghYlR0
成功なら普通に値を、失敗ならFalseを返すとかじゃ駄目なの?
2023/05/08(月) 16:26:44.75ID:OygwxwuO0
それは := を使う前提の話では
261デフォルトの名無しさん (ブーイモ MMdb-vs1K)
垢版 |
2023/05/08(月) 17:15:30.96ID:Kz8WKKNDM
成否と成功時の結果を返したい場合は例外を使うのが一般的なんじゃないかと思う
でなければHttpResponseのように結果ステータスとデータをまとめたクラスのインスタンスで返す
タプルはその簡易版

結果ステータスを持たずにクラス化する方法もなくはない
if foo.func(): do_something(foo.data)
2023/05/08(月) 17:17:05.80ID:htP7Y4l40
if func(list)で副作用で返すとかまぁ現代では誰もやらないから素直に
result = func()
if resultの正常条件:
にしときなよ。
2023/05/08(月) 17:35:23.12
l = []
result = None

def func():
____try:
________l.clear()
________l.extend(result)
________return l
____except:
________return False

#
result = None
print("成功" if func() else "失敗", l)
#
result = ["r1","r2"]
print("成功" if func() else "失敗", l)

#失敗 []
#成功 ['r1', 'r2']
2023/05/08(月) 17:48:09.47ID:OygwxwuO0
elifで繋いでいくとどんどん深くなるんだよな

多分、:= を使うのがベスト
でも環境的に使えない
副作用で返すのが次善の策で、実際うまく行っている
ただどう見てもバグの元
2023/05/08(月) 19:55:50.84ID:Z+v93H2P0
深くなるなら早期return
関数仕様変えたくないならreplace_xxx(list)とか関数名で説明するしかないんじゃない?
2023/05/08(月) 20:19:26.02ID:z5F93KHO0
その場で直前に関数定義(def)して条件につかえばブラックボックスにはならない
2023/05/09(火) 01:02:42.07ID:95FlmxIY0
https://gigazine.net/news/20230508-mojo-programming-language/

> 従来のPythonよりも高速化が可能な新たなプログラミング言語「Mojo」が開発される
> Mojoはこれまでのプログラミング言語であるPythonの使用感と
> C言語並みの性能を合わせ持つ言語だとされています。
2023/05/09(火) 13:13:30.67
同じコードで動くならもうPython13とかで統合してほしい
2023/05/09(火) 13:25:05.82ID:iN9Igm8n0
アンドロイダー乙
2023/05/09(火) 17:43:47.32ID:yVvdWTsg0
同じコードで動くのなら、それは現行のpython作ってる人達におまえら無能と言ってるのと同じだからずーっと喧嘩し続けるだろう
2023/05/11(木) 16:00:43.55ID:gUZpd4Xj0
テキストが1行ずつ入ったリストを順に処理していて、
ある条件の時は次の行も読んで処理したい
次のループでは処理済の行は飛ばす

普通にforでループにして、処理の中でイテレータをさらに取ってくるとかできる?
272デフォルトの名無しさん (ブーイモ MM63-vs1K)
垢版 |
2023/05/11(木) 16:22:44.99ID:bMPdFZE5M
>>271
2行ずつイテレートすれば?

(1, 2), (3, 4), (5, 6), …で十分なのか
(1, 2), (2, 3), (3, 4), …とする必要があるかは処理内容次第
273デフォルトの名無しさん (ブーイモ MM63-vs1K)
垢版 |
2023/05/11(木) 16:25:43.89ID:bMPdFZE5M
次の次の次の行もまとめて処理する必要があったりするならイテレーションを跨いで状態を持ち回る必要があるので単純な2行ごととはまた違うやり方になる
2023/05/11(木) 16:42:51.40ID:rmkBIaEM0
>>271
処理済の行は飛ばすなら単純
it = iter(lst)
for x in it: print(x, next(it))
ただ最終行でnext(it)したら例外になる
飛ばさないならmore_itertoolsかitertoolsを活用かな
2023/05/11(木) 17:37:54.85ID:gUZpd4Xj0
forの対象をリストでなくてiterにすればいいのか
forもnext()するし中でも同じものをnext()する

続きがあるよとデータに書いてあるのに実際には無いならそれはエラーでいい
2023/05/12(金) 00:21:34.94ID:hQCPlnw9a
Ruby なら、

input_text = <<'EOT'
あい
aa
あい
あい
bb
あい
あい
EOT

prev_line = [ ] # 前の行

# 改行を削除して、1行ずつ処理する
input_text.each_line( chomp: true ) do |line|
if line == "あい"
prev_line.push( "あい" ) # 代入だけして処理はしない
else
puts prev_line.join + line # 表示
prev_line = [ ] # 内容を削除
end
end

# もし、中身が残っていれば表示する
puts prev_line.join if prev_line.length > 0

出力
あいaa
あいあいbb
あいあい
2023/05/12(金) 07:13:16.33ID:pPbvGVzs0
今の行だけで続きがあるか判別できれば楽だけど、
次を読んで始めて前ので終わりだったと判明する処理は厄介だな
実際にはそっちの方が多い
pythonのコードもそれ
次のを読んで確定ならまだいいけど、最後まで読んだら終わりとみなす処理も必ずつきまとう
2023/05/21(日) 19:54:50.70
なぁ・・ __pycache__とかいう雑草みたいに抜いても抜いても生え散らかす謎ディレクトリなんの役に立つのこれ・・
2023/05/21(日) 23:07:26.87ID:kjLdpiYM0
キャッシュじゃねーの?
280デフォルトの名無しさん (ササクッテロレ Sp03-4vPs)
垢版 |
2023/05/22(月) 17:36:01.89ID:kOYkg4dap
Twitterの自動投稿をスレッド形式でツイートしたいのですけどできるのでしょうか?
281デフォルトの名無しさん (ワッチョイ 5ebb-cUXk)
垢版 |
2023/05/22(月) 18:22:25.30ID:EzOozQYh0
techiedelight.com/compiler/?~dictclass

こんな感じで実際にはデータが入ってる辞書型クラスがあるんですが
def get(self, _id:str):
if _id in self._results:
この時点では_idはstr型なのに
def __getitem__(self, key):
これにステップした瞬間keyがつねにintの0になります
デバッガで見ても何が何だかわからんのですが
どういう仕組みなんでしょうか?
2023/05/22(月) 18:35:07.65ID:TcXdI8Pp0
key は整数型とドキュメントに書かれているが?
283デフォルトの名無しさん (ワッチョイ 4a7f-ZDLm)
垢版 |
2023/05/22(月) 18:50:31.32ID:jGNTm+uC0
>>282
それはシーケンス型の場合って書いてませんか?
dict型のエミュレーションが目的なんですが
ちなみにin比較しないでmyclass[key]の場合は動作は期待通りです
inで比較したいのにエラーなるのでなぜかわからない事態です
キーは実際にあるので__missing__の実装とは関係ないかと思うのですが
284デフォルトの名無しさん (ワッチョイ 4a7f-ZDLm)
垢版 |
2023/05/22(月) 19:06:11.68ID:jGNTm+uC0
自己解決しました
>__contains__() を定義しないオブジェクトに対しては、メンバシップテストはまず、 __iter__() を使った反復を試みます
でした
2023/05/22(月) 19:15:00.64ID:2xhSnxHv0
a, b, c = list[:3]
とすると、中身があればいいけど無いとエラーになる
無い時はNoneが入るようにしようと思うと、
a, b, c = list[:3] + [None, None, None]
みたいにしないといけない

なんかもやもやするので、もっといい書き方ある?
2023/05/22(月) 19:52:51.64ID:Y3GhwDFGp
List_A
List_B
List_C
があって、CSVに出力すると1行目にA,2行目にBっていうふうになります。
これを縦に並べて1列目にA,2列目にB,3列目にCと出力したいです。

パンダスで行列に変換してから転置、転置したものの1行目をリストA',2行目をリストB'みたいにして出力して対応はできたのですがもう少しスマートなやり方ないでしょうか?
2023/05/22(月) 20:17:51.14ID:sAlsu4+P0
>>286
https://docs.python.org/ja/3/library/functions.html#zip
2023/05/22(月) 22:53:16.45ID:XGVinkOj0
>>285
いいやり方ないね
a, b, c = unpack_or_default(mylist, 3)のように自分で関数化かな
2023/05/22(月) 22:55:57.03ID:sAlsu4+P0
おおがかりでもよければ
from more_itertools import *
a, b, c = take(3, pad_none(lst))
2023/05/22(月) 23:03:18.26ID:2xhSnxHv0
やってること一緒だもんな

足りてない時はNoneで埋めます、を暗黙にする訳にはいかなくて、
何らかの方法でそれが判るように書かないといけないなら、元のままが一番素直かもしれん
2023/05/23(火) 03:09:27.85ID:gLCisDzi0
お前らのせいでクララが立ったんだが
292デフォルトの名無しさん (アウアウウー Sa2f-SwK+)
垢版 |
2023/05/23(火) 10:49:55.37ID:X1m2WkvHa
a, b, c, _ = (list + [None] * 3)[:3]
2023/05/23(火) 10:57:50.75ID:Kb7aSTvI0
_はなんで要るの?
2023/05/23(火) 16:45:29.43ID:koKlYaEi0
printで文字列と数値を合わせて表示する場合
formatメソッド使うとstr関数で数値を文字列に変換する必要が無い?
2023/05/23(火) 16:53:43.43ID:d8FV5sbM0
何故試さないんだ?
2023/05/23(火) 18:06:50.19ID:Kb7aSTvI0
formatって自由度高すぎて逆に正解が判らん
2023/05/23(火) 18:21:05.98ID:d8FV5sbM0
n=1
print(f"とりあえず{n}回試してみたらいいんだよ")
2023/05/23(火) 18:26:28.31ID:2KukQYy00
古い人間なんで
print('とりあえず{}回試してみたらいいんだよ'.format(n))
2023/05/23(火) 18:56:03.36ID:JMXPuiCR0
Formatは使わずに

a=1
print("a:")
print(a)

とかやっちゃうな。
2023/05/23(火) 18:58:29.83ID:Kb7aSTvI0
print(f'{a=}')
が使えない期間はどのくらいあったんだっけ
2023/05/23(火) 19:02:29.48ID:gLCisDzi0
%dがないと書けないだろそれ
2023/05/23(火) 19:37:45.42ID:JMXPuiCR0
a=1
print('aは', a, 'です')

で1行に書ける。
桁数指定等しないならformatを使わなくてもよい。
2023/05/23(火) 19:44:20.80ID:Kb7aSTvI0
それでいいじゃんという思いがあったから、f文字列の実装があんなに遅かったんだろうな

str = f'aは{a}です'
print(str)

ができるので、文字列にしちゃった方が取り回しがいい
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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