Pythonのお勉強 Part74

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 0b4a-lz98)
垢版 |
2024/09/21(土) 10:14:02.15ID:ZHy4g+PL0
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。

※前スレ
Pythonのお勉強 Part73
https://mevius.5ch.net/test/read.cgi/tech/1717631290/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2025/01/24(金) 21:59:09.40ID:oJDbtKku0
王道は破壊的な処理をせずフィルタ動作にする
必要なら元の変数にアサインし直す
2025/01/24(金) 22:02:58.75ID:g+2OlWgu0
文脈が判らんけど、リストを条件に合うように作り直すなら、
あるべきリストを別に生成して、完成したら元のリストを更新するかな
2025/01/24(金) 22:24:39.69ID:CNUIUSvw0
リスト内包表記でいいじゃん
関数型言語的に書いた方がいいよ
forは使うところない
2025/01/24(金) 22:42:35.20ID:Js6GMDZG0
>>554
王道はin-placeで削除しようとせずにフィルターして削除済みの新しいリストを生成する
(Pythonでフィルターするときはcomprehensionを使うのがデフォ)

in-placeで削除したい時はリストの最後からインデックスで回して削除する

↓これはO(n)でいいところをO(n^2)で処理してるからNG
for i in tuple(リスト名):
 if predicate(i):
  リスト名.remove(i)
2025/01/24(金) 22:47:32.12ID:rKtZO0PM0
文が必要な場合には内包表記では書けないでしょ。
561デフォルトの名無しさん (アウアウウー Saa7-LZB9)
垢版 |
2025/01/24(金) 22:51:11.07ID:CUf3ZumHa
忌み数字を踏ませる業者、アプリ、コンピュータプログラムの嫌がらせ

動画再生回数、表示回数、登録者数、フォロワー数、評価数、コメント数、レベル、経験値、ポイント、HP、通貨、価格、メッセージ数、通知数、フレンド数

4(死)、13(キリスト教における忌み数字)

18(嫌)、24(〜に死)、34(〜さん死)

40、42、44

56(殺)、64(無視)

71(無い)、74(無し)、79(無く、亡く)

84(〜は死)、94(〜君死)、96(黒)

このような数字と名前や生年月日、IDなどを組み合わせて執拗に強調することで、精神攻撃をする業者やストーカー、嫌がらせ組織がキモい。
2025/01/24(金) 22:51:58.63ID:Js6GMDZG0
関数化するだけでしょ。
2025/01/24(金) 22:53:05.01ID:g+2OlWgu0
王道がわらわら出てくるっていう
2025/01/24(金) 22:57:24.27ID:oJDbtKku0
>>560
それよね
各操作を関数化したところで、短い=簡潔で分かりやすいとは限らない
デメリットもあるけどコロンとインデントで見通しよく書けるのも強み
2025/01/24(金) 22:59:26.00ID:rKtZO0PM0
内包表記は便利だけど、内包表記で書くためだけに関数を作るのは個人的にはちょっと嫌かな。そこはfor文と適宜使い分ければいいのでは。
2025/01/24(金) 23:07:41.94ID:g+2OlWgu0
わかりやすさの為なら何でもする
内包表記も関数化も抽象化でありわかりやすさ
説明変数もばんばん使うべき
2025/01/24(金) 23:44:28.59ID:bnSBcaeW0
>>554です
書き方が悪かったようですいません
リストの値をフィルターしたいのではなく
リストの値で処理した結果で削除が発生する処理をしています
実際は画像名のリストで画像判定をして
その結果で様々な処理をしているのですが
その処理の一つが削除というものです

>>559
逆回しは思い付きませんでした
削除しても飛ばされず処理出来ますね
2025/01/25(土) 00:01:16.03ID:JgWImGBF0
>>567
>リストの値で処理した結果で削除が発生する処理をしています
mapしてfilterしてるのと同じことでは?
2025/01/25(土) 00:28:58.11ID:PCXbr1vN0
>>567
日本語が意味不明だからコード出せよ
2025/01/25(土) 00:33:36.06ID:YBOPAb6b0
コード出せを悪口だと思ってるな
お前の母ちゃんコード出せ
2025/01/25(土) 01:04:29.61ID:ta403zjD0
結果保存用に空リストを作って、そこに加工後の画像だか画像名だかをappendしていくみたいな原始的なやり方ではダメかな?
2025/01/25(土) 02:05:52.81ID:PCXbr1vN0
なぜそこまで頑なにコードを出したくないのか理解不能
573デフォルトの名無しさん (アウアウエー Sadf-C2Lh)
垢版 |
2025/01/25(土) 15:55:30.71ID:9QNSyzV2a
逆回しは良くやるけど万能ではない
2025/01/25(土) 16:15:16.97ID:kYeOXsrBM
そもそもオリジナルのリストの削除をバックワードに進めないとおかしくなるのは自明だろ
なんで先頭から消す必要あるの?
2025/01/25(土) 16:22:51.45ID:YBOPAb6b0
表が巨大でコピーなんか作ってられないなら仕方なく対象そのものをいじるけど、
その場合は削除するだけでも大変なので、やっぱりいい方法ではない
2025/01/25(土) 17:05:22.09ID:I/LFBEOt0
逆回しにしたところでリストの場合は途中の要素を削除したらそれ以降の要素(のポインタ)をコピーして詰める必要があるから非効率なんだよね
2025/01/25(土) 17:19:09.28ID:YBOPAb6b0
どう考えもバグりやすいし、大丈夫だと判っても他人や未来の自分は不安だし、
理解するのも時間かかるし、何もいいことがない

時間がかかったとしても、判りやすく堅牢な方法で書いて、
速度で困った時に初めてトリッキーな方法を検討する
2025/01/25(土) 19:02:59.44ID:ue9pmKTV0
for i in original_list[:]:
some_process( i )
みたいな感じでやるんじゃなかったっけ。

特に問題がないケースなら、
res = []
for i in original_list:
some_process( i )
と新しいリストを作ってsome_processの中で適宜res.appendする方が分かりやすいかなと思う。
2025/01/26(日) 00:49:53.92ID:tS9IC3AC0
ソースが巨大なら印だけつけてあとで一括削除
2025/01/26(日) 08:01:06.06ID:W6rEvGvT0
対象を直接操作して一括で削除するアルゴリズムってどんなの
581デフォルトの名無しさん (アウアウエー Sa52-FFa5)
垢版 |
2025/01/28(火) 10:16:11.80ID:dqvH8r5Ca
循環参照ありのRCGC
2025/01/28(火) 10:44:41.07ID:jWrC9Jca0
それリストの話じゃなくなってるやん
2025/01/28(火) 16:47:42.00ID:GmSjCRuqd
去年poetryでやってたけど
uv圧倒的に速いな
2025/01/30(木) 17:48:17.31ID:VLQDVSyo0
光る君への公式ホームページが31日で消去されるから保存したい
シンプルだしwgetでいけるかと思ったら表示にjavascript使ってるから
それのせいで保存できなかった

調べていくうちにpythonとヘッドレスブラウザを利用する方法があると知った
しかし、プログラミングのプの字もさっぱりです。pythonも昨日インスコしたばっかり
pythonとヘッドレスブラウザを利用した方法、解説されているようなサイトやヒントご存じでしたら教えてください
2025/01/30(木) 18:08:53.47ID:+zNA14SN0
まるっとローカルに保存してくれるツールを買え
2025/01/30(木) 18:13:37.22ID:x7iBFXJ9d
>>584
https://ja.m.wikipedia.org/wiki/波乗野郎
2025/01/30(木) 18:14:18.23ID:x7iBFXJ9d
>>584
PerMan Surfer 波乗野郎でごっそり保管
https://ja.m.wikipedia.org/wiki/波乗野郎
2025/01/30(木) 18:27:40.22ID:lxoi8Hgj0
HTTrackのProxyTrackつかうのがええんでは
2025/01/30(木) 19:59:08.37ID:rlxtAv1y0
画像だけ全部落としたい、みたいな時も大抵は汎用ツールは使えなくて、
サイト毎に特化したのを作るな

サイトまるごとだとさらに難易度が上がる
リンク先は含めるのかみたいな判断付かない問題が出てくる
外部サイトは含めないとしたくても、ページの内容が複数のサイトで構成されてたりする
590デフォルトの名無しさん (アウアウエー Sa52-FFa5)
垢版 |
2025/02/01(土) 12:23:22.67ID:Dm0gVBeEa
imgタグもファイル名とかじゃなくてbase64で展開されてたりするよな
591デフォルトの名無しさん (ワッチョイ 3f3d-ZuVD)
垢版 |
2025/02/03(月) 09:45:21.23ID:gwlnb/NB0
data1からdata2に変換したい。
data1=b'Z\x00V\x00-\x00E\x001\x000\x00\x00'
data2="ZV-E10"

data1はバイナリデーターで元はtcpのパケットの一部。
(英数+x00) (英数+x00) (英数+x00) ・・・・
というふうになってる。
2025/02/03(月) 10:56:25.39ID:CGp2zuw30
変換したいのならすればいいじゃない
593デフォルトの名無しさん (ワッチョイ 3f3d-ZuVD)
垢版 |
2025/02/03(月) 12:03:25.53ID:gwlnb/NB0
>>592
どうやって?
2025/02/03(月) 12:46:11.42ID:eVgE9/na0
https://docs.python.org/ja/3.13/library/stdtypes.html#bytes
bytesはバイトのシーケンスだから好きにすればいいけど
一見UTF-16LEにもみえるから
data2 = data1.decode('utf-16le', errors='ignore')
でもいけそう
2025/02/03(月) 12:46:55.10ID:CGp2zuw30
えー
置換すりゃあいいじゃん
文字列短いかいならsplit/joinでもまあいい
2025/02/03(月) 12:48:55.52ID:CGp2zuw30
たよねー
俺もnull終端させたutf16-leだと思う
ignoreせずにstripしてからdecodeかな
597デフォルトの名無しさん (ワッチョイ 3f3d-ZuVD)
垢版 |
2025/02/03(月) 14:44:29.24ID:gwlnb/NB0
>>594
THXです。
できました。
2025/02/03(月) 15:00:49.10ID:eVgE9/na0
596さんが書いてるけどignoreだと不正なシーケンスに弱いから
末尾0か確認してスライス[:-1]で削るのが手堅いよ
安価なかったので心配
599デフォルトの名無しさん (アウアウエー Sabf-J/8e)
垢版 |
2025/02/04(火) 12:24:19.84ID:AbihjpY6a
data1=b'Z\x00V\x00-\x00E\x001\x000\x00\x00\x00'
じゃないのは何故なんだぜ
600デフォルトの名無しさん (ワッチョイ 3f86-vucM)
垢版 |
2025/02/04(火) 19:51:38.43ID:Nh0/7bRn0
Google Colaboratoryで自動でカッコやシングルクォーテーション、ダブルクォーテーションを閉じてくれるのはいいのですが
改行するのに右小指を右矢印まで移動させるのが面倒くさいです
この機能を有効にしながらタイピングのホームポジションから極力指を動かさずにプログラムを改行する方法はどういったものがありますか
2025/02/04(火) 20:02:33.96ID:Q6BV74Me0
ダイヤモンドカーソル
2025/02/04(火) 20:05:48.54ID:Yb/oB3W3M
wordmasterですね?
2025/02/04(火) 20:15:46.13ID:bltbnC560
キーボードショートカット表示させたら発見多い
vimバインドがあるのにも気づける
2025/02/04(火) 20:16:37.26ID:Q6BV74Me0
capsキーをモディファイア化して、カーソルとpgup/dn, home, end, ctrl-home, ctrl-end
なんかをそのへんのキーにアサインすると便利
ctrlなんかにするのはもったいない
605デフォルトの名無しさん (ワッチョイ cf3e-fK0e)
垢版 |
2025/02/05(水) 12:03:09.56ID:0aVaPzHU0
textwrap --- テキストの折り返しと詰め込み
https://docs.python.org/ja/3.12/library/textwrap.html

標準ライブラリにこんなモジュールあったの初めてしった
606デフォルトの名無しさん (アウアウエー Sabf-J/8e)
垢版 |
2025/02/05(水) 14:41:00.30ID:RWIQAOlpa
ctrl+J ctrl+M
2025/02/05(水) 18:14:35.27ID:d15iAK/y0
WindowsだとCtrl+EやCtrl+Aは動かないんだっけ?
2025/02/05(水) 18:53:32.47ID:dNg2S/kf0
アンダースコア2個の変数って
VSCodeのデバックでも見えなくなるんだな
そこは値みせろよ
2025/02/05(水) 21:07:19.31ID:4wonhmBO0
https://www.deback.be
選択肢にないからドイツ語圏は弱小なんだな
学びがある
610デフォルトの名無しさん (ワッチョイ 63c4-SXYI)
垢版 |
2025/02/09(日) 17:06:41.88ID:cm7GCNiQ0
スレッド処理できんぞこのポンコツ
2025/02/09(日) 17:14:28.12ID:tUOkxeUe0
ThreadPoolExecutor使えば簡単に実装できるだろ
GIL無効のはまだ試したことないけど
2025/02/09(日) 22:07:58.46ID:DVKKH7160
enumerate()はindexが追加される、と覚えてるから、
indexを2番目にしてしまうという間違いを繰り返す

大抵は、for val in array: と書いてて、
indexが必要になって追加すると思うので、
前に挿入という変更にも抵抗がある
2025/02/09(日) 22:42:27.28ID:1H3Dm2g50
使い勝手からするとindexは先頭であってんだけど
tupleやなくクラスだったらよかったかな
挿入という感覚はないな
2025/02/10(月) 09:56:50.77ID:JMZMJPbu0
items() が key, valueの順で渡してくるのは納得なんだよな
enumerate() も意味的には似てるんだけど、
dictはforで読んだらkeyが返るけど、listは中身だしな

まあ、複数同時に返して順番意識しないと間違う仕様が全部悪
2025/02/13(木) 17:02:51.99ID:uy7D7eTZ0
windowsでリアルタイムで画像を描かせるとウィンドウが反応なしになる
最初pygameで作って、Pyxelでも駄目で、matplotlibも駄目だった
どう見ても原因はwindows側なんだけど、どうやったら回避できるんだろう
2025/02/13(木) 17:53:45.53ID:iuf/njBUM
メッセージキューの状態は?
2025/02/13(木) 18:21:00.45ID:gV1L3zya0
型ヒント、どうやって書くとおK?

>>> a:int, b:int = 1, 2
File "<stdin>", line 1
a:int, b:int = 1, 2
^
SyntaxError: invalid syntax
2025/02/13(木) 18:50:18.04ID:UcNEd134M
>>617
そういう書き方しなければならない理由ある?
619デフォルトの名無しさん (ワッチョイ 232a-6f6K)
垢版 |
2025/02/13(木) 20:34:08.66ID:gV1L3zya0
>>618
そういう書き方とは何を指したの。
書き方がおかしいので、正しい書き方を質問した。
2025/02/13(木) 21:07:07.34ID:1OgGkneUp
二ついっぺんに?
2025/02/13(木) 21:41:07.46ID:uy7D7eTZ0
def func(a:int = 0, b:int = 0): # OK
a, b = 0, 0 # OK
a:int = 0, b:int = 0 #NG

ということだな
2025/02/13(木) 23:08:28.29ID:FScSEbGI0
>>619
回答がでてるから(俺は確認してない)
気にしてないと思うけど
コードは手段であって目的ではない
エラーが出てよくわからないなら別の方法探すのが合理的だろ?
2025/02/13(木) 23:20:12.60ID:uy7D7eTZ0
a, b = 0, 0
のケースは、
(a, b) = (0, 0)
というタプルへの代入の省略形だと思うので、
関数定義の引数の列とは本質的に別物

タプルだと思って書くと、
(a:int, b:int) = (0, 0)
これが文法的に許されてるかという個別の話になって、
単純にタプルに型アノテーションは書けません
という誤りに帰着する
2025/02/13(木) 23:39:49.88ID:3i0teOTZ0
>>621
>a:int = 0, b:int = 0 #NG
a:int = 0; b:int = 0 #OK

7.2.2. Annotated assignment statements
The difference from normal Assignment statements is that only a single target is allowed.
https://docs.python.org/3/reference/simple_stmts.html#annotated-assignment-statements
2025/02/13(木) 23:48:39.44ID:3i0teOTZ0
変数の数が多かったりアノテーションが長かったりするのであれば
一旦1つの変数で受けといてからunpackすればいいんじゃないか思う
style guideとかでこの辺りが確立されてるやつがあるのかどうかは知らん

xs: Tuple[Optional[int]] = 1, 2, 3
x, y, z = xs
2025/02/13(木) 23:50:55.54ID:uy7D7eTZ0
a:int = 0, b:int = 0
だと何が不味くてエラーにしたのか、ピンとこないな
誤解の余地はどこにもないと思うけど
2025/02/14(金) 00:40:32.45ID:itWJ0HMk0
文法規則に沿ってないからエラーになってるだけでしょ

a:int = 0, の時点でパーサーからすると`0, `はタプルなのに
b:intのコロンようなサポートされてない表現が来てるから文法エラー
2025/02/14(金) 00:52:13.45ID:kUuP9oE90
いや、言語設計の話ね
引数の列みたいなタプル的なもので許されてるなら、
タプルでも許されるような規則になってる方がコンシスタント

それを許すと別の問題が生じるなら仕方ないけど、
特にそんなのがあるような気がしない
2025/02/14(金) 01:53:56.51ID:itWJ0HMk0
54氏に絡んだ私が馬鹿だったみたいだね
2025/02/14(金) 07:12:48.02ID:P2h4GvQIH
型アノテーションはどう考えてもコードを冗長にするだけの効果しかなかった
次期バージョンからは廃止して欲しい
アノテーションありとなしのコードが混在する世界は誰も得しない
2025/02/14(金) 07:34:58.64ID:8QRTr0+h0
01氏は相変わらずだのう
よく知らんけど
2025/02/14(金) 12:40:51.82ID:mTgus/9Q0
型アノテーションしないとvscodeでメソッドとか補完してくれないじゃん~
2025/02/14(金) 12:47:27.45ID:rES5mJq/0
>>630
これはそう
型の表現がゴミなのでその型意味ある?ってやつばっかでノイズにしかならん
tsみたいに別の処理系として作るべき
2025/02/14(金) 13:23:14.36ID:6dC8Hfpk0
>>625
>xs: Tuple[Optional[int]] = 1, 2, 3
これじゃダメじゃん
ellipsis忘れてた
2025/02/14(金) 19:00:49.38ID:y0//4+C60
どうせdataclassで型指定が必須になる
636デフォルトの名無しさん (ワッチョイ 8edb-u07z)
垢版 |
2025/02/14(金) 22:20:16.99ID:zA34SgDn0
age : int = int(9)
右のint()は不要ってことだよね
今だと全部上の文にしようとしていました
2025/02/14(金) 22:27:43.41ID:y0//4+C60
型なんかコンテキストに任せるperlの時代がまた来ないかな
厳密なのはCに任せておいて、手抜き派は限界まで脱力しないと
638デフォルトの名無しさん (ワッチョイ 8edb-u07z)
垢版 |
2025/02/14(金) 23:33:39.76ID:zA34SgDn0
perlは$@%で変数の中身と参照方法の手がかりがあるの楽すぎる
しかも記号の切り替えでアクセス方法も切り替えられる
初心者の俺だけかもしれないけど
2025/02/15(土) 00:03:38.48ID:7QZxROg40
>>638
dollar_とかatmark_とか変数に付ければいいのでは?
2025/02/15(土) 00:09:45.51ID:nmEKbiHe0
指し示す時は%varとか@varだけど、使う時は$var{}とか$var[]なのは、
普通に混乱するよな
同じ名前が使えるのはやばすぎるので、敢えて使わないようにしてた
2025/02/15(土) 00:24:38.71ID:Ff6IMwfd0
>>636
右のint()はintにキャストしたい時に使う
左のintも大半の箇所では不要

数値リテラルで初期化する場合に明示的に型を書く必要があるケースはあまりない
上で書かれてるdataclassのfieldなんかは例外
2025/02/15(土) 01:12:51.65ID:8VzqP0+T0
type aliasでwin32 apiみたいに狂ったようなヘッダーファイルのimportとかになったら嫌だな
2025/02/15(土) 02:36:03.74ID:jP/E47uy0
型ヒントないとやだやだ
644デフォルトの名無しさん (ワッチョイ 8edb-u07z)
垢版 |
2025/02/15(土) 03:01:40.24ID:uBYSxski0
>>641
ありがとうございます
645デフォルトの名無しさん (ワッチョイ 8edb-u07z)
垢版 |
2025/02/15(土) 03:03:06.76ID:uBYSxski0
>>640
なるほど
2025/02/15(土) 09:21:15.19ID:PDHi7G9/0
一括代入の左辺って、正確にはタプルではないよね。タプルに引き付けて考えるより、代入文の構文の1類型として整理しておく方が良いんじゃないかと思うが。
2025/02/15(土) 10:22:34.31ID:FKA6BWJy0
>>> x = a, b = 2, 3
>>> type(x)
<class 'tuple'>
よくわからんな
2025/02/15(土) 10:51:26.01ID:HEvUb6VY0
>>646
タプルとおもっていたが、正確には何なの?
2025/02/15(土) 13:22:10.39ID:j/KKg+ui0
タプルだよ
a, b = 1, 2 は(a, b) = (1, 2)と同じ

内部的にも一旦タプルとして扱われてunpackingが行われる
[a, b] = 1, 2とかにすれば左辺はリストになるけど
括弧省略したカンマ区切りの場合はタプル
2025/02/15(土) 14:36:18.19ID:0rXlrcS60
たとえば、タプル (3, 4) では、(要素0の)3を指すポインタと(要素1の)4 を指すポインタとはメモリ上隣接した位置に配置されるけど、
a = 1 b = 2 の後に a, b = 3, 4 と一括代入をしても、(一旦タプルが作られるのかどうかはともかく)そういうことにはならないんじゃない?

*[a, b], c = 1, 2, 3 のようないわゆるスター代入も、イテラブルのunpackではないと思うし。
2025/02/15(土) 16:45:49.40ID:yy3Wu/gg0
return文の複数値の返却もタプルだけど、
なぜかカッコを省略することが多い
まぁ、あくまでカンマがタプルの肝だからということか
2025/02/15(土) 17:05:56.61ID:0vZBBpUh0
リストの内包表記の[]を()にすると、
タプル内包表記ではなくジェネレータ内包表記になる罠
2025/02/15(土) 17:06:49.88ID:8VzqP0+T0
カッコの用途と意味が多くて初学者にはきついと思うわ
( ) はタプルとGenerater
{ } は辞書と集合
[ ] はリストと内包表記
2025/02/15(土) 17:09:49.95ID:0vZBBpUh0
空の集合で初期化しようとしてs = {} とか書いてしまう罠
(1,) とか class_ とか苦し紛れいろいろ
2025/02/15(土) 17:33:56.56ID:0rXlrcS60
丸括弧は関数・クラス等の呼び出し、角括弧はリスト、波括弧は辞書および集合。
リストと辞書と集合には内包表記があって、generator式は内包表記の仲間。
そうやって整理する分には、(単要素タプルの書き方がちょっと不格好なところを除けば)そんなに違和感はないけどなぁ。
辞書についてリテラル表記は波括弧なのに参照は角括弧なのはちょっと引っかかりを憶えないでもないけれども、これは他の言語でもそうだし。
他の言語と比べて特に複雑ということはないと思うけど。

むしろVBAみたいに、配列の添字指定に丸括弧を使わされたりする方が嫌だわ。
2025/02/15(土) 19:13:45.78ID:PDHi7G9/0
immutableなタプルの要素にはそもそも代入ができないはずなので、それだけでも一括代入の左辺がタプルでないのは明らかなのでは。
一括代入の左辺に丸括弧や角括弧が使えるのは、入れ子構造になっているときにその構造を明確にするために過ぎず、リストやタプルとは全く関係ないって考えた方が分かりやすいように思う。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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