【まず1嫁】くだすれPython(超初心者用) その55

■ このスレッドは過去ログ倉庫に格納されています
2021/10/01(金) 15:46:47.17ID:9qOHXj6D
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。
「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合★は、
  表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。

Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★
【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、
プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その54
https://mevius.5ch.net/test/read.cgi/tech/1623240344/

次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
2021/10/10(日) 15:13:50.14ID:ykpYSE0z
>>141
ふむ、matchが遅いのだろうね、、じゃあ二人の良いところをドッキングしよう
for x in range(500000):
____p_err_files = p_err_files_org.copy()
____for i in p_err_files:
________i = str(i).replace("/", "\\") + '\\' #replaceのせいで見にくいからあえて別にしてみました
________p_err_files = [j for j in p_err_files if not str(j).replace("/", "\\").startswith(i)]
これは3秒いっちゃうんじゃない?

ところで/と\\って混在するの? pathlib.Pathをstr変換するとOSに合わせた区切り文字で文字列化しない?
replaceいらないんじゃない? いや、私も昔混在しててエラーになった経験があるんだけども
それって文字列化してから自分でスラッシュを足して混在させてたような気がしてきた
今適当にやってみても混在しないし・・さ
2021/10/10(日) 16:01:08.25ID:PpP5FnLO
>>142
4秒になりました、内包表記早い
最近も混在してエラーになりました。詳しく調べてないです
気になるときは.replace("/", "\\")つけてます
2021/10/10(日) 16:15:29.74ID:PpP5FnLO
混在するのいやだから自分でつなぐときos.path.join使ってます
今ソース確認したけど"/"使ってない
2021/10/10(日) 16:23:35.36ID:ykpYSE0z
>>143
ttps://docs.python.org/ja/3/library/pathlib.html#operators
パスオブジェクトの文字列表現はそのシステム自身の Raw ファイルシステムパス (ネイティブの形式、
例えば Windows では区切り文字がバックスラッシュ) になり、
文字列としてファイルパスを取るあらゆる関数に渡すことができます

ほらほら、仕様的にWindowsでstr変換すると\\になるよん

>>144
ふーん、ちなみにpathlib.Pathにもjoinpathがあるからそっちの方がいいかも
2021/10/10(日) 17:00:09.47ID:PpP5FnLO
取得したばかだから混在はないですね
最終形
for x in range(500000):
____p_err_files = p_err_files_org.copy()
____for i in p_err_files:
________p_err_files = [j for j in p_err_files if not str(j).startswith(str(i) + os.sep)]
2021/10/10(日) 17:10:38.07ID:ykpYSE0z
>>146
う、美しい、、os.sepもエレガント
2021/10/10(日) 20:43:45.45ID:PpP5FnLO
ありゃ、バグってたかも(最終形じゃないやつ)

新コード 14秒

for x in range(5000):
____p_err_files = [str(p) for p in p_err_files_org]
____for i_idx, i in enumerate(p_err_files[:-1]):
________for j in p_err_files[i_idx + 1:]:
____________if j.startswith(i + os.sep):
________________p_err_files.remove(j)
____p_err_files = [pathlib.Path(p) for p in p_err_files]

最終形って書いたコード 56秒

新コードがバグってないかよくテストしなければ
2021/10/10(日) 21:08:00.05ID:PpP5FnLO
最初のデータだと
新コード 14秒
最終形って書いたコード 4秒
件数が多いと新コードが早い
2021/10/10(日) 21:41:11.57ID:ykpYSE0z
for x in range(5000):
____p_err_files = p_err_files_org.copy()
____for i in p_err_files:
________if i.is_dir():
____________i = str(i) + os.sep
____________p_err_files = [j for j in p_err_files if not str(j).startswith(i)]

最速のコード・・できました、、これは2秒台かもしれん
最後がドットのディレクトリでis_dir()ができるのか知りませんが
2021/10/10(日) 22:14:56.87ID:PpP5FnLO
>>150
衝撃の結果 最初のデータ(件数の少ないやつ)
新コード 14秒
最終形って書いたコード 4秒
isdir 167秒
コードを見ると一見早そうに見えるんだけど
2021/10/10(日) 22:25:50.37ID:PpP5FnLO
件数の多いデータ loop回数減らしてます
新コード 2秒
最終形って書いたコード 11秒
isdir 60秒
153デフォルトの名無しさん
垢版 |
2021/10/10(日) 22:53:16.01ID:fsOtTZsl
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^

あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!

クソチョンw
154デフォルトの名無しさん
垢版 |
2021/10/10(日) 23:14:16.55ID:kKlMir+m
is_dir()はos.stat(fstat)つかってそうだし遅いだろうね
事後処理多すぎるしos.walk()のが適当かも
2021/10/10(日) 23:25:00.22ID:ykpYSE0z
for x in range(5000):
____p_err_files = p_err_files_org.copy()
____for idx, i in enumerate(p_err_files[:-1], start=1):
________i = str(i) + os.sep #これは出した方が速いの?変わらない?
________p_err_files = [j for j in p_err_files[idx:] if not str(j).startswith(i)]
界王拳3倍だぁああああ
2021/10/10(日) 23:36:40.30ID:ykpYSE0z
やっぱ>>155は無し
このp_err_files[:-1]やp_err_files[idx:]ってダメな気がする
途中でp_err_filesの要素抜くからバグる気がするんだけど・・
新コードと最終形の結果同じなんだよね?
2021/10/10(日) 23:50:06.43ID:PpP5FnLO
>>155
最初のデータ(件数の少ないやつ)
新コード 14秒
155のやつ 2秒

件数の多いデータ 466件
新コード 28秒
155のやつ 32秒


件数の多いほうほぼ互角ですね

>________i = str(i) + os.sep #これは出した方が速いの?変わらない?
圧倒的に速いです
2021/10/10(日) 23:51:21.86ID:PpP5FnLO
>>156
新コードと最終形の結果は同じです
古いコードはバグってました
2021/10/10(日) 23:57:12.93ID:ykpYSE0z
for x in range(5000):
____p_err_files = p_err_files_org.copy()
____for i in p_err_files:
________if i in p_err_files:
____________i = str(i) + os.sep
____________p_err_files = [j for j in p_err_files if not str(j).startswith(i)]

はい、これ最後にするわw inで抜いた要素の場合は処理を飛ばすです
is_dir()みたいに遅いかも? お疲れっした!
2021/10/11(月) 00:00:41.38ID:Z6IULiPa
>>155

155は結果がおかしいです
2021/10/11(月) 07:20:20.01ID:nIh2l5lJ
出来ました、これが本当の最後! globで作られるリストでは先にディレクトリが並び、
後にそのディレクトリ内のファイルが並ぶことを利用して
消えるのは常にidxの後ろのファイルであることを考慮したものです

for x in range(5000):
____p_err_files = p_err_files_org.copy()
____for idx in range(len(p_err_files)):
________try:
____________i = str(p_err_files[idx]) + os.sep
________except IndexError:
____________break
________p_err_files = [j for j in p_err_files if not str(j).startswith(i)]
見てくださいこのカッコイイボディー、1秒台を叩き出すポテンシャルが伺えます
2021/10/11(月) 14:30:12.13ID:Z6IULiPa
最新コードです
メインループはリスト、サブループは集合
リストは長さでソート
集合で in を高速にし、内包表記で削除するデータを集め差集合を求める
件数が多い場合に焦点を当ててます

for x in range(5000):
____p_err_files = p_err_files_org.copy()
____p_err_list = sorted([str(p) for p in p_err_files], key = len)
____p_err_set = set(p_err_list)
____for i in p_err_list:
________if i in p_err_set:
____________i += os.sep
____________p_err_set -= {j for j in p_err_set if j.startswith(i)}
____p_err_files = [pathlib.Path(p) for p in p_err_set]

測定結果は後ほど
163デフォルトの名無しさん
垢版 |
2021/10/11(月) 15:03:13.08ID:yoxInkMN
p_err_files_orgを含めてideoneあたりに貼ってくれんかな
2021/10/11(月) 15:04:52.03ID:Z6IULiPa
最初のデータ(件数の少ないやつ) 500,000ループ
最新コード 14秒
新コード 13秒
最終形って書いたコード 4秒
159 3秒
161 3秒

件数の多いデータ 466件 5,000ループ
最新コード 4秒
新コード 14秒
最終形って書いたコード 54秒
159 28秒
161 13秒

巨大ディレクトリテスト 122496件 1ループ
最新コード 223秒
新コード 277秒
最終形って書いたコード 測定不能ギブアップ
159 ギブアップ
161 ギブアップ
2021/10/11(月) 15:38:36.71ID:9gfKW03X
> ID:PpP5FnLO, ID:ykpYSE0z
そろそろやめてもらっていいですか
2021/10/11(月) 15:38:47.81ID:nIh2l5lJ
>>164
ブラボー、集合速い!

ちなみに最新コードのsetで順番が変わった結果は、これで戻せると思います
____p_err_files = sorted([pathlib.Path(p) for p in p_err_set] , key=p_err_files_org.index)
2021/10/12(火) 00:09:42.22ID:QANgax+i
>>165
ガイジに話が通じると思ってる奴もガイジ
168デフォルトの名無しさん
垢版 |
2021/10/12(火) 13:14:04.41ID:Y4+OaxqJ
uuid含む辞書 のリストの検索って
やっぱ内包表記が一番早いですか?
item = [d for d in db if d[id] == _id][0]
169デフォルトの名無しさん
垢版 |
2021/10/12(火) 14:22:16.90ID:65IdcDyl
>>168
それだと遅延評価されずに全走査してから[0]を解決するから
リストが長いと不利
2021/10/12(火) 17:12:16.40ID:db3N35kL
>>169
こうですか?
item = next(filter(lambda d: d[id] == _id, db))
171デフォルトの名無しさん
垢版 |
2021/10/12(火) 18:55:46.32ID:rbfrUXN4
線形探索に変わりはないから本質的には変わらない
規模と目的にもよるが事前にハッシュテーブルを作成するなりしたらいいんじゃない?
172デフォルトの名無しさん
垢版 |
2021/10/12(火) 19:05:49.73ID:rbfrUXN4
>>170
最初の1つを取得したいなら素直にfor文で回して見つけ次第breakすればいいんじゃない?
2021/10/12(火) 19:27:30.01ID:db3N35kL
>>172
検索速度を速くするために内包表記、全走査せず見つけたら止まるようにジェネレータを使うので
item = next(filter(lambda d: d[id] == _id, db))
もしくは、
item = next(d for d in db if d[id] == _id)

>>171
ハッシュテーブル使うならこうですか?
item = eval(' | '.join([f'db[{i}]' for i in range(len(db))]))[id]
174デフォルトの名無しさん
垢版 |
2021/10/12(火) 19:48:08.27ID:Y4+OaxqJ
謎のなりすましw
175デフォルトの名無しさん
垢版 |
2021/10/12(火) 20:14:27.30ID:DOoMLgfj
tkinterとMVCを勉強中なんですが
view用のtkvarってmodel(db)に置くんですか?
view側が持つのですか?
2021/10/12(火) 20:38:17.90ID:db3N35kL
>>174
答えは見つかりましたか?
177デフォルトの名無しさん
垢版 |
2021/10/13(水) 00:27:53.69ID:zS1AsSBo
>>173
内包表記使わないと死ぬ病気なの?
いつ、何故内包表記が速くなるか勉強した方がいい
ネットに落ちているサンプルコードのように繰り返しappendする訳でもないのだから大して変わらん
178デフォルトの名無しさん
垢版 |
2021/10/13(水) 04:42:48.68ID:+txmauo5
>>175

view
ウィジェットとtkvar(表示(view)に関わる)

model
変数(データ実体)

controller
view.widget.tkvar.set(mode.var)

おれの認識
2021/10/13(水) 08:21:06.00ID:5N5C/lUt
>>177
内包表記みるとファビョっちゃう病気なの?
内包表記が速くなるだけじゃないことを勉強した方がいい
ネットに落ちてるサンプルコードのように単純な処理のだから内包表記を使わない手はない
2021/10/13(水) 08:46:20.82ID:XAFUKX/t
内包表記ってなんですか?
181デフォルトの名無しさん
垢版 |
2021/10/13(水) 10:54:11.99ID:V99uCirA
[_ for _ in (1,2,3)]
2021/10/13(水) 12:56:21.92ID:xAxceSCu
どんなに複雑なコードでも内包表記で書こうとするような奴はPython向いてないとは思う
2021/10/13(水) 13:38:38.75ID:znbxIIJY
馬鹿の一つ覚え
184デフォルトの名無しさん
垢版 |
2021/10/13(水) 14:17:57.86ID:k/aGOBxZ
next filterは見た目いいけどそのままだと例外飛ぶからdefault指定すべき
あとid検索をしょっちゅうやるつもりなら171の言う通りidをキーに持つハッシュテーブルにしたほうがいい
185デフォルトの名無しさん
垢版 |
2021/10/13(水) 15:04:27.22ID:i0OqJqsg
ネストする時は内包表記でもインデントしてね
2021/10/13(水) 15:48:08.21ID:5N5C/lUt
>>184
お、褒められたw default指定か、なるほど、、じゃあこう
item = next(filter(lambda d: d[id] == _id, db), None)

ハッシュテーブルって辞書のことですよね?
187デフォルトの名無しさん
垢版 |
2021/10/14(木) 08:52:02.98ID:tO9afOB/
>>178
Viewは簡単に生き死にするから、変数(データ実体) をtkvarにしてModelに持たせる方がいいと思うよ。
形式変換などが必要なときは、Modelにそれ用のアクセサを付ければいい。
ControllerがModelとViewのインスタンスを持ち、ViewはControllerだけを参照する。
Modelは基本的にController、Viewの参照をどっちも持たない。
188デフォルトの名無しさん
垢版 |
2021/10/14(木) 09:10:49.38ID:Exint/Io
作り方にもよるけど
tkinterをqtに変えようとか、移植に伴ってツールキットを交換することを考えると
modelをtkverのデータ置きにすると全面的な書き直しがいると思うつーか、そうなった

ので俺は最近modelには一般の変数とロジックだけ置く
viewには可能な限りtkinter固有の全部を置く。vcmdとかも
で全操作をcontrollerに書く。コイツが全部の発信源
よくviewがmodel見る三角形図あるけど、個人的にはviewの影響を限定的にしたい

https://i.imgur.com/a7HUCYH.png
189デフォルトの名無しさん
垢版 |
2021/10/14(木) 09:42:03.64ID:tO9afOB/
確かに、tkinterのVarはデータバインディング(しかも双方向可能)の考え方そのものなので、
MVCに少しそぐわない(ViewModelっていうんだっけ?)。
どっちにしろ、データベースやネットワークサービスがデータソースになる場合は、Varは単なるバスみたいな使い方になるし。
190デフォルトの名無しさん
垢版 |
2021/10/14(木) 11:40:53.17ID:wCUDNz+i
まあ移植性を捨てればtkvarはdbに置いて
bindingと最小限のイベントハンドラをcontrollerに置いて
あとはm-v間でやってくれぇ〜というのが一番書きやすいだろう

真面目にやるとcontroller薄くなりすぎるはずなのでc-vとmに分けるっていうのも良いと思う。わしはこれが好き
GUI(tk.Tk):
_super().__init__()
云々
GUI.mainloop()するやつ
191デフォルトの名無しさん
垢版 |
2021/10/15(金) 16:12:08.85ID:Tty/f66M
PythonでLZ4を使うと、lz4.frame,lz4.block,lz4.streamっていうのがあるみたいなのですが
それぞれ何がどう違うのでしょうか
検索すると英語の情報が多いのですが、アホなので分かりません
2021/10/15(金) 16:25:20.62ID:yvxpjjvp
質問ですが、defaultdictに対して.getを使った場合、値が存在しない場合でもメモリを使ってしまうのですか?
193デフォルトの名無しさん
垢版 |
2021/10/15(金) 18:54:50.40ID:TUcBd+bC
>>192
https://docs.python.org/ja/3/library/collections.html#collections.defaultdict.__missing__
> もし default_factory 属性が None でない場合、このメソッドは引数なしで呼び出され、与えらえた key に対応するデフォルト値を提供します。この値は、辞書内に key に対応して登録され、最後に返されます。

なんでデフォルト値の分消費する。(各種オーバーヘッドは未考慮)

>>> help(collections.defaultdict)
困ったらhelp
同じことが書かれてる
2021/10/15(金) 19:07:39.63ID:4mSLIm8m
>>193
ありがとうございます。
2021/10/16(土) 23:48:05.88ID:7DXC85u5
>>321
youtube-dl --skip-download --dateafter now-3days --get-title --get-id --get-description --get-duration -i "チャンネルURL"
196デフォルトの名無しさん
垢版 |
2021/10/17(日) 14:11:08.72ID:7C23oe5i
Mike Python
197デフォルトの名無しさん
垢版 |
2021/10/17(日) 17:37:19.17ID:kbVq19bl
> お前は毎朝起きるたびに俺に負けたことを思い出すよ^^

あー、ホンッとに思い出すなあ(笑)
キチガイの嘘つきの低レベルFランの、
朝鮮ゴキブリBot君は、
チョン独特の「なにもできないけど俺のほうがジャップより偉い!」的な
ことはよーくわかったよ。
ホントなにもできない朝鮮ゴキブリBot君!

クソチョンw
2021/10/17(日) 19:55:12.60ID:t5hHOLNv
Python3.9で、souted()とラムダ式を勉強しているところです
sorted()のkeyに指定するラムダで、戻り値にマイナスを付けるコードがあり、
これは何だろうと思って以下のリストを作成してsorted()にかけて出力してみました
(コメント行として書いている箇所が出力結果です)

li = [('a', 1), ('b', 200), ('c', 50), ('e', -3), ('h', -55000), ('d', 10)]

print(sorted(li, key=lambda x: x[0]))
# [('a', 1), ('b', 200), ('c', 50), ('d', 10), ('e', -3), ('h', -55000)]

print(sorted(li, key=lambda x: -x[0]))
# TypeError bad operand type for unary -: 'str'

print(sorted(li, key=lambda x: x[1]))
# [('h', -55000), ('e', -3), ('a', 1), ('d', 10), ('c', 50), ('b', 200)]

print(sorted(li, key=lambda x: -x[1]))
# [('b', 200), ('c', 50), ('d', 10), ('a', 1), ('e', -3), ('h', -55000)]

出力結果を見るに、マイナスを付けるとreverse=Trueを指定したときと
同じ結果が得られるということなのかなと思ったのですが
1つだけTypeErrorになってしまいました
これは何故なのでしょうか
199デフォルトの名無しさん
垢版 |
2021/10/17(日) 20:06:53.96ID:hODn77KL
sorted関係ないしエラーメッセージがまんま理由

>>> -'a'

TypeError: bad operand type for unary -: 'str'
2021/10/17(日) 20:42:04.88ID:t5hHOLNv
>>199
ありがとうございます

戻り値が'a'というstr型なのに負の値にしようとして怒られてるってことでしょうか
key=lambda x: -x[N] という書き方は、reverseオプションの代替ではなく
戻り値に-1を掛けている…という認識であってますか?
(そのため結果として逆順にソートされたように見える)
2021/10/17(日) 20:47:32.06ID:NeddvKFI
-x[0] の演算順序は、どっち?
-x が先なのか、-(x[0]) のカッコ内が先なのか?

前者なら、xが文字列型で、
後者なら、x[0]が文字列型で、エラー
2021/10/17(日) 23:08:28.45ID:ChJOOsVw
>>198
・lambda x: 〜のxには('a', 1)とかが入る
・lambda x: 〜の返り値(〜の計算結果)でソートされる
・文字列型にマイナスを掛ける操作(符号反転)は定義されてないのでエラー
・符号反転がreverse=Trueと等価か?についてはそう考えていいけど数値でないと符号反転操作ができないので万能ではない
・符号反転が役立つのは文字列(例では第1要素)は辞書順でソートして数値(例では第2要素)は降順でソートするとか昇順降順降り混ぜたソートをしたいとき

Effective Pythonからの受け売りなので立ち読みとかできるなら読んでみるといい
2021/10/17(日) 23:47:35.33ID:W3iDPsRK
モドリッチ
204デフォルトの名無しさん
垢版 |
2021/10/18(月) 13:59:02.18ID:bl1s8YLW
values = [2, 1, 0, 1, 2]
orders = []

values[i]が右より大きいならorders.append[i]
その条件を満たすまでi+nで見ていく.最大値len(values)

上記の例だと[0, 1, 4, 3, 2]
が得たいんだけど、どう書いたらいいですか?
なんか超低速か無限ループにはまってしまって…
205デフォルトの名無しさん
垢版 |
2021/10/18(月) 14:01:45.68ID:bl1s8YLW
あ valuesはランダムな整数のランダムな長さの配列(1〜10くらい)です
2021/10/18(月) 14:16:32.64ID:zNA2BH7N
なんで01432になるんだろ
01444じゃないの
2021/10/18(月) 14:17:00.26ID:N0fetjcl
>>204
仕様を自然言語で
もれなく、間違いなく、人に伝わるように書くことに力を注いでくれ
2021/10/18(月) 14:18:36.21ID:zNA2BH7N
つか問題文は自分の言葉で伝え直さないでコピペするべき
209デフォルトの名無しさん
垢版 |
2021/10/18(月) 15:32:14.49ID:r9t2S6+p
コピペばれると退学だから
それと判らないように質問してるんだろう
210デフォルトの名無しさん
垢版 |
2021/10/18(月) 20:16:41.07ID:2nbXAeQ6
言わんとしていることはわかる
ランク付けだろ
rank =[i for i in range(len(values))]
でdrop駆使していけるはずだ
2021/10/18(月) 21:39:27.07ID:jVCGujj+
>>3
機械学習で最適なクロール間隔を学習しろ
2021/10/19(火) 10:06:30.06ID:10EXZk67
def hoge(*,a,b):
_print(a,b)
m="a"
n="b"
eval( f"hoge({m}=10,{n}=20)" )

こういう引数必須で、動的に引数名を指定したい場合
evalを使うのが定石でしょうか?
2021/10/19(火) 10:27:13.40ID:K7fU3Cbr
そんな回りくどい処理が必要な状況が、
俺には全く想定できない。
2021/10/19(火) 10:41:06.36ID:LLvKMRJR
>>212
動的に引数名を指定しないのが定石
evalはユーザー入力でpythonの式を受け取りたい場合に使う

引数名だけを動的に指定したい理由は?
それ次第だけどeval以外の方法があると思うよ
215デフォルトの名無しさん
垢版 |
2021/10/19(火) 11:38:40.18ID:DE2IVg3K
タプルのリストをlist.sort()するとき
同じ値なら元のインデックスが若い順に並びますか?

l = [('あ', 0), ('い', 1), ('う', 0)]
l.sort(key = lambda x:x[1])

必ず
[('あ', 0), ('う', 0), ('い', 1)]
ですか?

場合によって
[('う', 0), ('あ', 0), ('い', 1)]
になりうる?
216デフォルトの名無しさん
垢版 |
2021/10/19(火) 11:43:32.81ID:z0N9htUT
>>215
https://docs.python.org/ja/3/howto/sorting.html#sort-stability-and-complex-sorts

python list.sort stable
とかでググる
2021/10/19(火) 11:47:54.98ID:10EXZk67
>>213,214
ありがとうございます
datetimeのtimedeltaを使いたいのですが
timedelta(seconds=3000)
な感じで、secondsの部分がminutesやdaysにしたいときがあるので
条件分岐していたのですが、他の方法があるのかなと思いまして
2021/10/19(火) 11:51:51.94ID:kFYLNe28
そもそもですがタプルってなんですか?
2021/10/19(火) 11:59:21.79ID:10EXZk67
自己解決?したかもです
daysやらminutesやらデフォルト値を0に設定して
timedelta(days=days・・・,seconds=seconds)
みたいに全部ぶっこめばいい気がしてきました
220デフォルトの名無しさん
垢版 |
2021/10/19(火) 12:01:28.19ID:DE2IVg3K
>>216
おー勉強になりました
ありがとう
2021/10/19(火) 12:11:27.56ID:LLvKMRJR
>>219
timedelta()の引数は全部任意でデフォルト値0が設定されてるから自分で指定する必要はないよ
2021/10/19(火) 12:18:41.33ID:10EXZk67
>>221
def hoge(u,v):
_timedelta(ここ=v)

hoge("seconds",3000)みたいなとき
ここ、の部分をどうやって指定するのでしょうか?

if u=="days":
_timedelta(days=v)

みたいにしていたのですが
timedelta(days=days,,,,seconds=seconds)
でもいいのかなぁと
2021/10/19(火) 12:25:04.75ID:K7fU3Cbr
a=minutes=3
timedelta(a)でいいんでない?
2021/10/19(火) 12:25:09.04ID:10EXZk67
さらに自己解決?したかもです
timedelta(**{"seconds":3000} )
でイケました
2021/10/19(火) 12:25:47.01ID:10EXZk67
>>223

なんと、それでできたんですね
ありがとうございました!
2021/10/19(火) 12:26:11.41ID:K7fU3Cbr
いや、できんかった。スマンw
2021/10/19(火) 12:26:52.98ID:10EXZk67
と、思いましたが>223だとdaysに入ってしまうようです?
連投すいません
2021/10/19(火) 12:27:10.83ID:K7fU3Cbr
dayとして扱われるわ
2021/10/19(火) 14:30:29.56ID:LLvKMRJR
>>222
それはdictionaryで渡して、アスタリスクx2でunpackingする

def hoge(kargs):
__return timedelta(**kargs)

delta = hoge({“seconds”: 3000})
230デフォルトの名無しさん
垢版 |
2021/10/19(火) 19:13:22.75ID:p2X/wkWb
hoge(u="seconds",v=3000)という呼び出し方しかできないようにする。
def hoge(*, u, v):
...
>>229みたいなのは使う側に優しくないので、引数がわかり切っているときは使わない。
231デフォルトの名無しさん
垢版 |
2021/10/20(水) 09:19:40.59ID:OEiI06HQ
>>212
setattr
232デフォルトの名無しさん
垢版 |
2021/10/20(水) 19:49:22.13ID:EZ3+LSel
ネタがなくても月3万円を稼ぐブログなら誰でも作れる。後はやるかやらないかだけ

ブログで稼ごうと思ったら簡単だよ。
身の回りにあるものをとにかく写真に撮りまくれ!
そのカメラに撮った商品を使い込め!それも徹底的にな!
あとは、お前の感じた感想をそのままブログに書き込むんだ!
その紹介した商品にAmazonのアフィリエイトを忘れるなよ。
これをひたすら続ければ、月に数万円は余裕。

先程の書き込みにも書いてあったとおりなんですが、手順は簡単、次の3ステップです。
1身の回りにあるモノの写真をデジカメで撮りまくる
2写真に撮ったモノを徹底的に使い込む
3モノの使用感を自分の感じたままブログに書き殴る
2021/10/21(木) 05:44:05.86ID:2FnoPHWW
3万円なんてお小遣いにもならねえな
2021/10/21(木) 06:53:33.05ID:udHqGeXx
スライスの使い方誤解してたわ

list = [10,20,30,40,50,60]

|10|20|30|40|50|60|
要するにサンドイッチのパンに要素が挟まってて
左のパンからスライス[0]位置、スライス[1]位置ということなのか

del list[2:4]
なら、|30|40|が除かれて|10|20|50|60|になるのか

なんかあんまり直感的じゃないな
del list[2:3]だと結局|30|しか取り除かない事になるからdel list[2]とかわらないよね?
2021/10/21(木) 08:45:58.03ID:POpI6QwK
>>202
大変遅くなりましてすみません
>>198です
丁寧に説明してくださりありがとうございます
とてもわかり易い

Effective Python についてググるだけでも掻い摘んだ説明が出てきて面白いです
2021/10/21(木) 08:47:32.47ID:rE4toNa0
どっちのやり方が良いかは場合によるんではっきり言えないけど、swiftやrubyを除けばメジャーな言語の多くがindexは0始まり、範囲は開始位置、終了位置+1で指定するんで、多くのプログラマにとってはpythonのやり方のほうが慣れ親しんでいるとは言えるかも

ちなみにswift、rubyは終了位置、終了位置+1のどちらの記法も使える
2021/10/21(木) 12:27:44.59ID:moBizkab
round(val, n)
みたいな簡単な書き方で、小数点○桁以下切り捨て、っていうのは無いのですかね?
浮動小数点の誤差については気にしないです
123.4567を小数点2桁で切り捨てなら、
123.45 (またはそれに限りなく近い数値)になってほしいです

math floorは桁指定できないですよね
探してもdecimalだとか10^nしてintしてから割るとかやることに対してちょっと大げさなものしか見つかりませんでした
238デフォルトの名無しさん
垢版 |
2021/10/21(木) 12:46:20.72ID:/d/0VOpU
floor(x*10**n)/10**n
239デフォルトの名無しさん
垢版 |
2021/10/21(木) 13:17:26.48ID:T2C3Q12E
さすがにそれは
240デフォルトの名無しさん
垢版 |
2021/10/21(木) 16:14:53.89ID:8ILWSSPd
フリーランスエンジニア専門の案件一括検索サイト「フリーランススタート」、
掲載案件数15万件突破!さらにリモートワークの掲載案件数4,000件突破!

ITフリーランスの独立支援サービス『テックビズ』&定額制全国住み放題『ADDress』提携開始

ITフリーランスの独立支援サービス『テックビズ』とフリーランス向け報酬即日払いサービス『先払い』提携開始

新型コロナの影響で、常駐型フリーランスエンジニアのリモート対応が増加

フリーランスエンジニア必見!リモートワークや週3案件があるサービス5



高報酬案件を求めるフリーランスエンジニアのための案件マッチングプラットフォーム
「Pro Connect Enginner(プロコネクトエンジニア)」正式版、2021年2月28日リリース!
2021/10/21(木) 16:18:34.28ID:yuVpO81C
"1×2.txt"のように"×"が文字列に入ったファイル名を処理しようとしています。
files = sys.argv[1]
で受け取って
print(files)
すると、×がなくなって
12.txt
に化けています。避ける方法はありませんか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。