当スレに★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(超初心者用) その56
http://mevius.5ch.net/test/read.cgi/tech/1640536690/
次スレたては >>985 あたりが挑戦する。
### END OF TEMPLATE ###
【まず1嫁】くだすれPython(超初心者用) その57
■ このスレッドは過去ログ倉庫に格納されています
2022/05/22(日) 22:25:08.74ID:/hGmbW/Z
287デフォルトの名無しさん
2022/07/17(日) 19:47:38.44ID:Fxi+TDuE >>286
それだとfの引数が増えた時に対応できない
それだとfの引数が増えた時に対応できない
288デフォルトの名無しさん
2022/07/17(日) 20:59:15.42ID:4v0QWrzY mapと内包表記どっちが軽いんだろ?
a=[1,2]
b=[i+1 for i in a]
これで終わる話ではあるよね
a=[1,2]
b=[i+1 for i in a]
これで終わる話ではあるよね
289デフォルトの名無しさん
2022/07/17(日) 21:23:00.57ID:zoulLgXv 話を単純化して話してんだろ
一般的な解があるほうが親切
一般的な解があるほうが親切
290デフォルトの名無しさん
2022/07/17(日) 21:25:35.67ID:pr2Iyzs9 >>287
なるほど、f([1,2,3],[4,5,6]) → [5,7,9] とかにするならmatomeはそのままで
def f(*a):
__return sum(a)
で対応できるけども、しかし! 引数が1つの場合が f([1,2,3]) → [2,3,4] であるならば、
引数が2つの場合、f([1,2,3],[4,5,6]) → ([2,3,4], [5,6,7]) となるのが自然ではなかろうか?
であるとするならば、fはリストの各要素の計算でありそのままにして、matomeを改造する必要がある
なるほど、f([1,2,3],[4,5,6]) → [5,7,9] とかにするならmatomeはそのままで
def f(*a):
__return sum(a)
で対応できるけども、しかし! 引数が1つの場合が f([1,2,3]) → [2,3,4] であるならば、
引数が2つの場合、f([1,2,3],[4,5,6]) → ([2,3,4], [5,6,7]) となるのが自然ではなかろうか?
であるとするならば、fはリストの各要素の計算でありそのままにして、matomeを改造する必要がある
291デフォルトの名無しさん
2022/07/17(日) 21:31:17.15ID:LbIjTSt1 >>289
どれに対しての話?
どれに対しての話?
292デフォルトの名無しさん
2022/07/17(日) 21:38:02.50ID:Rw0hMsrD293デフォルトの名無しさん
2022/07/17(日) 21:38:57.48ID:Rw0hMsrD というか、ただのsumなら普通は関数にぶっこまないよね
294デフォルトの名無しさん
2022/07/17(日) 21:43:59.07ID:pr2Iyzs9 リストの各要素に1足すだけの場合も普通に関数にぶっこまないけどな
295デフォルトの名無しさん
2022/07/17(日) 22:12:41.33ID:pr2Iyzs9296デフォルトの名無しさん
2022/07/17(日) 22:43:41.36ID:Xin01ayH zipするのは違うと思うけどな
297デフォルトの名無しさん
2022/07/18(月) 09:21:19.20ID:4im9UY7E298デフォルトの名無しさん
2022/07/18(月) 10:01:23.22ID:4lWXgehE f(a,b,c) -> rをリスト用にリフトするなら
f'([(a1,b1,c1), (a2,b2,c2),(a3,b3,c3)…]) -> [r1,r2,r3,…]
f'(([a1,a2,a3,…], [b1,b2,b3,…], [c1,c2,c3,…])) -> [r1,r2,r3…]
にするのは筋が悪い
f'([(a1,b1,c1), (a2,b2,c2),(a3,b3,c3)…]) -> [r1,r2,r3,…]
f'(([a1,a2,a3,…], [b1,b2,b3,…], [c1,c2,c3,…])) -> [r1,r2,r3…]
にするのは筋が悪い
299デフォルトの名無しさん
2022/07/18(月) 10:22:26.91ID:q/MsDqBP >>290の完成イメージ
def get_list_items(func):
____def process(*lists):
________ret = tuple([func(item) for item in lst] for lst in lists)
________return ret[0] if len(ret) == 1 else ret
____return process
@get_list_items
def f3(item):
____return item+1
f3([1,2,3],[4,5,6],[7,8,9]) → ([2, 3, 4], [5, 6, 7], [8, 9, 10])
f3([1,2,3],[4,5,6]) → ([2, 3, 4], [5, 6, 7])
f3([1,2,3]) → [2, 3, 4]
なるほど、この場合は可変にする必要性をあまり感じないね
f3([1,2,3]), f3([4,5,6]), f3([7,8,9])って個別に呼べばいいだけだし
>>284の方が断然優れていますわ
def get_list_items(func):
____def process(*lists):
________ret = tuple([func(item) for item in lst] for lst in lists)
________return ret[0] if len(ret) == 1 else ret
____return process
@get_list_items
def f3(item):
____return item+1
f3([1,2,3],[4,5,6],[7,8,9]) → ([2, 3, 4], [5, 6, 7], [8, 9, 10])
f3([1,2,3],[4,5,6]) → ([2, 3, 4], [5, 6, 7])
f3([1,2,3]) → [2, 3, 4]
なるほど、この場合は可変にする必要性をあまり感じないね
f3([1,2,3]), f3([4,5,6]), f3([7,8,9])って個別に呼べばいいだけだし
>>284の方が断然優れていますわ
300デフォルトの名無しさん
2022/07/18(月) 10:36:45.20ID:E3N1Hbif 個別に呼ぶよりまとめて呼んだほうが処理が軽いんじゃないの
301名無し募集中。。。
2022/07/18(月) 10:39:15.32ID:kc1Sb0dj FOR文でフォルダ以下のサブフォルダの中のファイルを
拡張子毎に振り分けるプログラムを作ってみましたが
1ファイルを移動するのに1秒くらいかかってしまいます
shutil.move(FFF, KKK) (FFFとKKKは変数)
この文を削除するとものすごく早くなります
どうすれば早くなりますか?
拡張子毎に振り分けるプログラムを作ってみましたが
1ファイルを移動するのに1秒くらいかかってしまいます
shutil.move(FFF, KKK) (FFFとKKKは変数)
この文を削除するとものすごく早くなります
どうすれば早くなりますか?
302デフォルトの名無しさん
2022/07/18(月) 10:44:27.05ID:E3N1Hbif でもあれか、matomeをつけてfを宣言してしまうと、普通にfを使うことができなくなってしまうのか
このへん関数を呼ぶときにmatomeをつけるかどうかで使い分ける方法ないのかな
このへん関数を呼ぶときにmatomeをつけるかどうかで使い分ける方法ないのかな
303デフォルトの名無しさん
2022/07/18(月) 10:54:26.68ID:Tf87Irt3304デフォルトの名無しさん
2022/07/18(月) 11:04:03.01ID:q/MsDqBP305デフォルトの名無しさん
2022/07/18(月) 11:36:57.20ID:1omE+gQa なんか頭の可笑しいのが劣化版だしまくるスレになってるな
306デフォルトの名無しさん
2022/07/18(月) 12:10:19.60ID:jgot1txW307デフォルトの名無しさん
2022/07/18(月) 12:13:47.35ID:J9TOF8GR numpy ぐらい、Python のトップ・キノコードの動画があるのでは?
キノクエストと言う、2千円のサロンも始まった
キノクエストと言う、2千円のサロンも始まった
308デフォルトの名無しさん
2022/07/18(月) 12:42:22.47ID:Ni7oGdeS309デフォルトの名無しさん
2022/07/18(月) 12:47:11.59ID:q/MsDqBP310デフォルトの名無しさん
2022/07/18(月) 13:41:26.68ID:Zd8mDGLh 少なくとも>>280をやるためにデコレーターはないわ
311デフォルトの名無しさん
2022/07/18(月) 14:39:38.37ID:lIUF2c+K312デフォルトの名無しさん
2022/07/18(月) 14:46:42.16ID:koL1rSR0 初心者に対して不要な一般化は余計に分かりにくくするだけやろ
やり方自体が御世辞にもいいアプローチとは言えないし
やり方自体が御世辞にもいいアプローチとは言えないし
313デフォルトの名無しさん
2022/07/18(月) 15:01:53.40ID:q/MsDqBP >>310
デコレータみたときは「やられた!」って思ったね
しかも可変、嫉妬してちょっと噛みついてみたけど見事に返り討ち
いやはや、彼のコードはみんなマネした方がいいよ、良いものはどんどん取り入れよう
そういえば、ひろゆきが良く自慢げに言う話を思い出したんだけど、
ゲームを作ってみる授業?か何かで友達が書いたコードがメチャメチャ短かったんだって
上下左右の操作なんだけど、ちょっとした計算で実現していて、それ見たひろゆきが才能の差を
感じてゲームクリエイターをあきらめたとかいう才能の話
それ聞いたときはアホじゃね?良いコードみたらパクればいいだけじゃんって思ったものだよ
たぶんひろゆきはすごくプライドが高くてちょっと躓いただけで諦めちゃうメンタルなんだよね
そんなこんなで出来上がったのがヒマつぶしwとか言って他人の文句しか言わない人間になっちゃった
「頭悪い!」と他人を下げることで自分を慰める毎日、やっぱ諦めずに挑戦するのって大事だなって思いました
そうホリエモンってひろゆきと真逆だよね、ホリエモンは今も色んなことに挑戦している、ホリエモンは輝いているよ
デコレータみたときは「やられた!」って思ったね
しかも可変、嫉妬してちょっと噛みついてみたけど見事に返り討ち
いやはや、彼のコードはみんなマネした方がいいよ、良いものはどんどん取り入れよう
そういえば、ひろゆきが良く自慢げに言う話を思い出したんだけど、
ゲームを作ってみる授業?か何かで友達が書いたコードがメチャメチャ短かったんだって
上下左右の操作なんだけど、ちょっとした計算で実現していて、それ見たひろゆきが才能の差を
感じてゲームクリエイターをあきらめたとかいう才能の話
それ聞いたときはアホじゃね?良いコードみたらパクればいいだけじゃんって思ったものだよ
たぶんひろゆきはすごくプライドが高くてちょっと躓いただけで諦めちゃうメンタルなんだよね
そんなこんなで出来上がったのがヒマつぶしwとか言って他人の文句しか言わない人間になっちゃった
「頭悪い!」と他人を下げることで自分を慰める毎日、やっぱ諦めずに挑戦するのって大事だなって思いました
そうホリエモンってひろゆきと真逆だよね、ホリエモンは今も色んなことに挑戦している、ホリエモンは輝いているよ
314デフォルトの名無しさん
2022/07/18(月) 15:04:25.71ID:PImFDAtt315デフォルトの名無しさん
2022/07/18(月) 15:04:43.60ID:EPf9iKEG >>311
一般的?
一般的?
316デフォルトの名無しさん
2022/07/18(月) 15:17:32.88ID:J9TOF8GR Ruby とか、関数型言語Elixir では、map が基本
317デフォルトの名無しさん
2022/07/18(月) 15:18:04.67ID:o0lyPM3S 他人の話を否定するだけの奴って何の生産性もないよな
低レベルでもコード提示するほうがよっぽど役に立つわ
低レベルでもコード提示するほうがよっぽど役に立つわ
318デフォルトの名無しさん
2022/07/18(月) 15:22:34.62ID:qwr+PsCM >>312
参考までに良いアプローチplz
参考までに良いアプローチplz
319デフォルトの名無しさん
2022/07/18(月) 15:36:01.64ID:y8tEu6pL matomeとmap、どっちが速いんだろうか
どっちもforで毎回f呼び出すよりは速そうだけど
どっちもforで毎回f呼び出すよりは速そうだけど
320デフォルトの名無しさん
2022/07/18(月) 15:55:55.10ID:GojDtZHN デコレータ
使って観たい
御年頃
使って観たい
御年頃
321デフォルトの名無しさん
2022/07/18(月) 15:59:17.63ID:LKJtspF0 処理時間測定してみたらmapのほうが2割前後速かったわ
322デフォルトの名無しさん
2022/07/18(月) 15:59:40.46ID:GojDtZHN >低レベルでもコード提示するほうが
ないわ
ないわ
323デフォルトの名無しさん
2022/07/18(月) 16:06:47.73ID:kISKbyyY ついでなんで書いとくね
実行時間
forを使ってf呼び出し:1
matome:0.5
map:0.4
実行時間
forを使ってf呼び出し:1
matome:0.5
map:0.4
324デフォルトの名無しさん
2022/07/18(月) 16:21:22.72ID:ln/vUyrz325デフォルトの名無しさん
2022/07/18(月) 16:30:53.42ID:qwr+PsCM デコレーターに親殺されたニキがおるな
326デフォルトの名無しさん
2022/07/18(月) 17:45:39.65ID:UwLRS3iL 普通に考えてリストに関数をそれぞれ適用させたいならmapが一番シンプルでmapと同意の内包表記が最もPythonらしいのでは?
327デフォルトの名無しさん
2022/07/18(月) 18:04:13.67ID:LNL0CNxW mapと同意?どういうこと?
328デフォルトの名無しさん
2022/07/18(月) 18:04:19.00ID:pfq1SIlO お盆も近いからデコレータに恨みがある奴も
這い出して来ているんでしょう
這い出して来ているんでしょう
329デフォルトの名無しさん
2022/07/18(月) 18:08:48.63ID:PImFDAtt 単にmapの人が、なんでmap使わないんだと言っているだけなのでは?
それがデコレータsageに見えると
それがデコレータsageに見えると
330デフォルトの名無しさん
2022/07/18(月) 18:23:16.60ID:q/MsDqBP 内包表記の方が断然好きだな〜、mapはシンプルになる場合もあるけど
今回のようにゴチャる場合もあるんだよな〜
下記はmatomeを自分好みの関数名と変数名に改変したヤツでっす!
def get_lists_items(func):
____# 内包表記版
____def process(*lists):
________return [func(*items) for items in zip(*lists)]
____return process
def get_lists_items(func):
____# map版
____def process(*lists):
________return list(map(lambda items: func(*items), zip(*lists)))
____return process
今回のようにゴチャる場合もあるんだよな〜
下記はmatomeを自分好みの関数名と変数名に改変したヤツでっす!
def get_lists_items(func):
____# 内包表記版
____def process(*lists):
________return [func(*items) for items in zip(*lists)]
____return process
def get_lists_items(func):
____# map版
____def process(*lists):
________return list(map(lambda items: func(*items), zip(*lists)))
____return process
331デフォルトの名無しさん
2022/07/18(月) 18:28:18.32ID:2ipqvE3v332デフォルトの名無しさん
2022/07/18(月) 18:40:20.03ID:qwr+PsCM >>280の望みは「intを引数に取り計算結果を返す関数を、"シームレスに"リストにも拡張すること」だからデコレーターが適当じゃない?Pythonicかどうかは知らん
333デフォルトの名無しさん
2022/07/18(月) 18:50:45.67ID:0V7pBSnr デコレータは不適当
デコレータは基本的に元の関数を透過的に拡張するために使う物
def f(a, b, c)をデコレートしても
デコレート前と同じf(a, b, c)で呼び出し可能で
成功時には同じ戻り値を得られるように作る
高階関数ならなんでもデコレータにすればいいわけじゃない
デコレータは基本的に元の関数を透過的に拡張するために使う物
def f(a, b, c)をデコレートしても
デコレート前と同じf(a, b, c)で呼び出し可能で
成功時には同じ戻り値を得られるように作る
高階関数ならなんでもデコレータにすればいいわけじゃない
334デフォルトの名無しさん
2022/07/18(月) 18:52:28.91ID:q/MsDqBP335デフォルトの名無しさん
2022/07/18(月) 18:53:15.28ID:9fYXH/DB 勉強になったわ。
今までPyQtでアプリ作っていたが、@pyqtSlot()がQtデザイナーからのリンクみたいなもんかと思ってました。
すっきりです。
今までPyQtでアプリ作っていたが、@pyqtSlot()がQtデザイナーからのリンクみたいなもんかと思ってました。
すっきりです。
336デフォルトの名無しさん
2022/07/18(月) 18:58:21.00ID:VjQ/Ckj0 デコレーターのメリットがあるならそれ使えばいいけど遅い上に記述量増えるしね
どう見ても>>320だろw
どう見ても>>320だろw
337デフォルトの名無しさん
2022/07/18(月) 20:38:42.55ID:FbOneiqz forよりは速い
338デフォルトの名無しさん
2022/07/18(月) 22:52:23.80ID:P7xIx3wJ 今回の話でデコレータが内包表記より優れているという理屈が理解できない
def f(a):
return a+1
a=[1,2]
print([f(i) for i in a])
これで事足りるでしょ
def f(a):
return a+1
a=[1,2]
print([f(i) for i in a])
これで事足りるでしょ
339デフォルトの名無しさん
2022/07/18(月) 22:52:35.33ID:SFjyzDm9 超絶初心者です。
counter: int = 0 # 他の処理で変わっていく
def test(self):
user_name = "xxxx"
if counter > 0:
now = datetime.datetime.now()
..... # 色々処理
now ←ここで nowは参照させたくない、スコープ外にしたい
今だとnow変数はif文が処理されれば値が入ります。
now変数のスコープをif文内だけにするってことはできますか。
counter: int = 0 # 他の処理で変わっていく
def test(self):
user_name = "xxxx"
if counter > 0:
now = datetime.datetime.now()
..... # 色々処理
now ←ここで nowは参照させたくない、スコープ外にしたい
今だとnow変数はif文が処理されれば値が入ります。
now変数のスコープをif文内だけにするってことはできますか。
340デフォルトの名無しさん
2022/07/18(月) 23:05:31.63ID:2hrGCnNJ self ということはクラスメソッドだと思うけど
他のメソッドから self.test() を呼べば now は隠蔽される。
もしくは頭で now = None しておいて
if now is not None:
でわけるとか。
他のメソッドから self.test() を呼べば now は隠蔽される。
もしくは頭で now = None しておいて
if now is not None:
でわけるとか。
341デフォルトの名無しさん
2022/07/18(月) 23:13:05.76ID:1e6Pm9kS >>330
starmap使えばlambdaいらない
starmap使えばlambdaいらない
342デフォルトの名無しさん
2022/07/18(月) 23:22:42.01ID:q/MsDqBP >>341 なるほど、でも内包表記の方が見やすいよね!
from itertools import starmap
def get_lists_items(func):
____# starmap版
____def process(*lists):
________return list(starmap(func, zip(*lists)))
____return process
from itertools import starmap
def get_lists_items(func):
____# starmap版
____def process(*lists):
________return list(starmap(func, zip(*lists)))
____return process
343デフォルトの名無しさん
2022/07/18(月) 23:35:38.05ID:Yb4pZTqb344デフォルトの名無しさん
2022/07/18(月) 23:42:11.41ID:q/MsDqBP >>343
for文使うのがベストってこと?
for文使うのがベストってこと?
345デフォルトの名無しさん
2022/07/18(月) 23:54:17.73ID:8wpG6nJ0 re.matchで何がマッチしたか知る方法てある?
s = 'ABCDEFGHIJK'
m = re.match(r'ABC|HIJ', s) 'm: <re.Match object; span=(1, 4), match='BCD'>
match='BCD'を取ってきたいのだが、方法てある?
ネットだと()でくくってgroupsでとれて書いてあるけど、
s = 'ABCDEFGHIJK'
m = re.search(r'(BCD|HIJ)', s)
x_text = m.groups(0)
print(x_text)
('BCD',)て表示されるし、x_textはstr型じゃないから文字列操作ができない。
Python 3.9.13です。
s = 'ABCDEFGHIJK'
m = re.match(r'ABC|HIJ', s) 'm: <re.Match object; span=(1, 4), match='BCD'>
match='BCD'を取ってきたいのだが、方法てある?
ネットだと()でくくってgroupsでとれて書いてあるけど、
s = 'ABCDEFGHIJK'
m = re.search(r'(BCD|HIJ)', s)
x_text = m.groups(0)
print(x_text)
('BCD',)て表示されるし、x_textはstr型じゃないから文字列操作ができない。
Python 3.9.13です。
346デフォルトの名無しさん
2022/07/19(火) 00:05:16.63ID:pVZms+nG347デフォルトの名無しさん
2022/07/19(火) 00:32:46.32ID:8NIkYSWg348デフォルトの名無しさん
2022/07/19(火) 01:22:31.44ID:XqVlnmi4 >>339
del now でどうでしょうか
del now でどうでしょうか
349デフォルトの名無しさん
2022/07/19(火) 08:41:05.75ID:UwsMPoKY 内包表記って普通のforと違うみたいだけど、なんでこんなに速いの?
350デフォルトの名無しさん
2022/07/19(火) 09:10:11.34ID:mYl9AT7Z351デフォルトの名無しさん
2022/07/19(火) 09:30:11.93ID:ioxaO2di a=[f(x) for x in range(100)]
で、今xがいくつのところをやってますとprintする方法はありますか?
forを外に持ってくると処理が遅くなってしまうので避けたいです
で、今xがいくつのところをやってますとprintする方法はありますか?
forを外に持ってくると処理が遅くなってしまうので避けたいです
352デフォルトの名無しさん
2022/07/19(火) 09:32:53.74ID:Dm4GA3mb 訂正
a=[f(x[i]) for i in range(100)]
にします
iの値は関数に持ち込みません
持ち込むのなら関数でprintできますが、それはなしにします
a=[f(x[i]) for i in range(100)]
にします
iの値は関数に持ち込みません
持ち込むのなら関数でprintできますが、それはなしにします
353デフォルトの名無しさん
2022/07/19(火) 10:04:16.93ID:L7UUhMht >>352
a = [print(i) or f(x[i]) for i in range(10)]
a = [print(i) or f(x[i]) for i in range(10)]
354デフォルトの名無しさん
2022/07/19(火) 10:12:32.45ID:zbPEuSRT CPU処理を高速化するのはmultiprocessingを使うことでできたのですが、
今度はGPUでmodel.fitするほうが遅くてしょうがないです
multiprocessing同様に簡単に速くする方法があれば教えてください
今度はGPUでmodel.fitするほうが遅くてしょうがないです
multiprocessing同様に簡単に速くする方法があれば教えてください
355デフォルトの名無しさん
2022/07/19(火) 10:15:51.10ID:XqVlnmi4 >>352
fの中でカウント用の変数を持ってインクリメントする
fの中でカウント用の変数を持ってインクリメントする
356デフォルトの名無しさん
2022/07/19(火) 10:20:19.62ID:+zTkD2Kt で
357デフォルトの名無しさん
2022/07/19(火) 10:20:59.40ID:+zTkD2Kt358デフォルトの名無しさん
2022/07/19(火) 10:23:27.04ID:2mzjLS5j359デフォルトの名無しさん
2022/07/19(火) 10:30:11.09ID:2mzjLS5j >>345
re.findall
re.findall
360デフォルトの名無しさん
2022/07/19(火) 10:31:34.68ID:2mzjLS5j >>349
普通のforと違うから
普通のforと違うから
361デフォルトの名無しさん
2022/07/19(火) 10:36:57.19ID:COa8jHBw >>357
print(i)の戻り値がNoneだから、必ずorの右辺を返す
print(i)の戻り値がNoneだから、必ずorの右辺を返す
362デフォルトの名無しさん
2022/07/19(火) 10:51:26.50ID:brlHmAiq363デフォルトの名無しさん
2022/07/19(火) 11:07:31.09ID:+zTkD2Kt364デフォルトの名無しさん
2022/07/19(火) 11:30:53.28ID:bdrM7/md printしたらforと内包表記の違いなんて誤差に見えるほど遅くなると思うがそれはええんか?
365デフォルトの名無しさん
2022/07/19(火) 11:33:51.75ID:RISkfx3J forと内包表記で速さに違いが出るのはなぜですか?
同じコードをなぜ生成しないんですか?
同じコードをなぜ生成しないんですか?
366デフォルトの名無しさん
2022/07/19(火) 11:37:38.74ID:856tCJOd 内包表記でプログレス挟んで遅いのは嫌とかバカの極み
可読性考えて普通のforで回せ。 つか速度測ってみろ。大差ねえわたぶん
[(f(x[i]), print(i)) for i in range(10)]
可読性考えて普通のforで回せ。 つか速度測ってみろ。大差ねえわたぶん
[(f(x[i]), print(i)) for i in range(10)]
367デフォルトの名無しさん
2022/07/19(火) 12:00:14.16ID:GEUE7oT9 超初心者を馬鹿にしないと精神の安定が保てないかわいそうな人
368デフォルトの名無しさん
2022/07/19(火) 12:19:44.97ID:192s6b8D 馬鹿にされるような日本語使いする自称超初心者が悪い
369デフォルトの名無しさん
2022/07/19(火) 12:24:07.94ID:AricPVYV >>349
比較したコードを出してみて
比較したコードを出してみて
370デフォルトの名無しさん
2022/07/19(火) 12:31:03.42ID:ZGMRA42U >>351
print等の副作用を伴う処理を繰り返す場合は
内包表記ではなくforを使うのがpythonにおける暗黙の了解
値の加工生成と入出力を分けて書くのはpythonに限らずプログラミングの基本
print等の副作用を伴う処理を繰り返す場合は
内包表記ではなくforを使うのがpythonにおける暗黙の了解
値の加工生成と入出力を分けて書くのはpythonに限らずプログラミングの基本
371デフォルトの名無しさん
2022/07/19(火) 12:45:56.52ID:2mzjLS5j >>363
a = [[print(i), f(x[i])][1] for i in range(10)]
a = [[print(i), f(x[i])][1] for i in range(10)]
372デフォルトの名無しさん
2022/07/19(火) 12:59:28.59ID:COa8jHBw カウント1毎にプログレス表示すると内包表記使う意味ないかもしれんが、
リストへの追加100毎
カウント10000000毎にプログレス
で時間計測してみた
内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒
forループ
a=[]
for i in range(100000000):
____if not (i%10000000):
________print(i)
____if i%100 == 0:
________a.append(str(i))
20秒
行儀悪い書き方だが、条件しだいで効果はある
リストへの追加100毎
カウント10000000毎にプログレス
で時間計測してみた
内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒
forループ
a=[]
for i in range(100000000):
____if not (i%10000000):
________print(i)
____if i%100 == 0:
________a.append(str(i))
20秒
行儀悪い書き方だが、条件しだいで効果はある
373デフォルトの名無しさん
2022/07/19(火) 13:09:56.89ID:ieHxnJ8/ >>365
ループ内でpythonのインタプリタで実行される処理とコンパイル済みのCのコードで実行される処理の行き来が減れば速くなる
内包表記は式しか書けないのとlist.appendのようにインタプリタがメソッドを探す処理が不要にになることが多いので単純な式評価だと内包表記がやや速い結果になりやすい
(例えばループの外でappend = outlist.appendとしてループ内ではメソッドじゃなく関数呼び出しにすれば多少速くなる)
ただforより内包表記が速いから内包表記を使うというのは使い方が間違ってるか使う言語を間違ってる
ループ内でpythonのインタプリタで実行される処理とコンパイル済みのCのコードで実行される処理の行き来が減れば速くなる
内包表記は式しか書けないのとlist.appendのようにインタプリタがメソッドを探す処理が不要にになることが多いので単純な式評価だと内包表記がやや速い結果になりやすい
(例えばループの外でappend = outlist.appendとしてループ内ではメソッドじゃなく関数呼び出しにすれば多少速くなる)
ただforより内包表記が速いから内包表記を使うというのは使い方が間違ってるか使う言語を間違ってる
374デフォルトの名無しさん
2022/07/19(火) 13:35:02.16ID:RISkfx3J375デフォルトの名無しさん
2022/07/19(火) 13:41:20.47ID:2mzjLS5j 8秒の方はstr()呼ばれる回数も少ないんじゃね
やり直し
やり直し
376デフォルトの名無しさん
2022/07/19(火) 13:45:55.20ID:e6PA2QPH 内包表記を配列操作以外に使うな(関数叩くな)って書いてるのeffective pythonだっけ
>>374
速いコードって、たとえば進捗吐かないとか、無駄な評価式やループしないとか、そうやって作ってくんよ
鈍重な書き方しても速いのがいいっていうなら、もう根本的にpythonは遅い言語だよ
>>374
速いコードって、たとえば進捗吐かないとか、無駄な評価式やループしないとか、そうやって作ってくんよ
鈍重な書き方しても速いのがいいっていうなら、もう根本的にpythonは遅い言語だよ
377デフォルトの名無しさん
2022/07/19(火) 13:57:38.21ID:COa8jHBw >>375
str()呼ばれる回数は同じじゃね
でも、i%10000000の回数違ってた
内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒
forループ
a=[]
for i in range(100000000):
____if i%100 == 0:
________if not (i%10000000):
____________print(i)
________a.append(str(i))
12秒
str()呼ばれる回数は同じじゃね
でも、i%10000000の回数違ってた
内包表記
a = [(i%10000000 or print(i), str(i))[1] for i in range(100000000) if i%100 == 0]
8秒
forループ
a=[]
for i in range(100000000):
____if i%100 == 0:
________if not (i%10000000):
____________print(i)
________a.append(str(i))
12秒
378デフォルトの名無しさん
2022/07/19(火) 14:02:29.41ID:6WNMcjy9 >>377
printしない場合は?
printしない場合は?
379デフォルトの名無しさん
2022/07/19(火) 14:08:53.16ID:COa8jHBw >>378
str(i)呼ぶ回数は、両方 100000000 / 100 = 1000000回
str(i)呼ぶ回数は、両方 100000000 / 100 = 1000000回
380デフォルトの名無しさん
2022/07/19(火) 14:12:29.27ID:6WNMcjy9 >>379
うんだから何秒なの?
うんだから何秒なの?
381デフォルトの名無しさん
2022/07/19(火) 14:12:50.87ID:Xr1AbmZQ 結局書きづらい、読みづらくてミスしちゃうんだから
普通のforループの方が総カロリー低いと思います
普通のforループの方が総カロリー低いと思います
382デフォルトの名無しさん
2022/07/19(火) 14:17:28.28ID:COa8jHBw383デフォルトの名無しさん
2022/07/19(火) 14:19:06.99ID:RISkfx3J 行列プログラマーという本では、集合の表記に近い内包表記のほうが分かりやすいと書いてあります。
実際、もっぱら内包表記を使っています。
実際、もっぱら内包表記を使っています。
384デフォルトの名無しさん
2022/07/19(火) 14:40:11.78ID:HHxHBIIc385デフォルトの名無しさん
2022/07/19(火) 14:49:08.31ID:Dd2ngZhk 内包表記でもインデントしていいんですよ
可読性高めていけ
可読性高めていけ
386デフォルトの名無しさん
2022/07/19(火) 14:52:21.67ID:COa8jHBw■ このスレッドは過去ログ倉庫に格納されています
