1 名前:デフォルトの名無しさん [2020/01/02(木) 15:56:54.08 ID:ZUrZA+uS.net] 当スレに★Python以外のプログラミング言語での回答類を書くべからず★ ☆「Ruby では」「Rubyでは」をNGワード登録推奨 このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 ★Pythonのソースコードはそのまま5ちゃんにコピペするとインデントが崩れるので ↓等のてきとうなソースコード用うpろだに貼ってきてください。 スクショをImgur等にうp といった 手抜き(クソ行為)禁止。 ttp://ideone.com/ デフォ設定はC用のため言語選択ボタン押下がピコ手間かも。 ttp://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。 ttp://pastebin.com/ まずまずシンプル。 ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ttps://jupyter.org/try (旧try.jupyter.org)ちょっとめんどうそう ◆エラーを解決したい場合は、表示されてるエラー全文(勝手に省略禁止)と 実行環境(Pythonのバージョン・OS名・IDEの種類とバージョン)をシッカリ書くこと。 ◇Python公式サイト◇ www.python.org/ ◇まとめwiki◇ ttp://python.rdy.jp/ 〇前スレ〇 くだすれPython(超初心者用) その45【Ruby禁止】 https://mevius.5ch.net/test/read.cgi/tech/1571188632/
492 名前:デフォルトの名無しさん [2020/02/06(Thu) 10:35:45 ID:GAMNd4TG.net] >>486 すみませんです…どうやって検索したらよいかお教え頂けましたら…
493 名前:デフォルトの名無しさん [2020/02/06(Thu) 11:07:22 ID:d7NhcEcy.net] 教えてやるからどこかにパースしてるHTMLを全部置け そしてどの要素が欲しいかHTMLの中に <!--この要素が欲しい--> と書け
494 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 11:20:21 ID:xfRnZ+h4.net] JavaScriptで動的になったからSelenium使えって書いてた
495 名前:デフォルトの名無しさん [2020/02/06(Thu) 11:27:31 ID:GAMNd4TG.net] 有難うございます。 すみません、keywordは山として以下のようにして取得を目指しており それで<!-- --> でほしいのですが 以下の表記方法ではだめでしょうか。 urlKeyword = parse.quote(keyword) url = 'https://www.google.com/search?hl=jp&q=' + urlKeyword + '&btnG=Google+Search&tbs=0&safe=off&tbm=isch' headers = {"User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/10.0",} request = req.Request(url=url, headers=headers) page = req.urlopen(request) html = page.read().decode('utf-8') html = bs4.BeautifulSoup(html, "html.parser") elems = html.select('.rg_meta.notranslate') この最後の.rg_meta.notranslate のあたりで目的の画像を一つ一つ取り出せなくなっていると分析しています。
496 名前:デフォルトの名無しさん [2020/02/06(Thu) 11:28:23 ID:GAMNd4TG.net] 一昨日くらいまでは取れておりました。 現在も、 ではグーグル画像検索そのものが取れてないとか何かブロックされているのか?と言うと elems= の前に 例えば print(html) とするとGoogle画像検索結果の画面全体は取れているのです。 しかしそれは全体像なので、個々の1枚1枚を取得してphpmyadminに格納したり、とかそれが狙いであるので elems = のところでつまずいてはやはりまずい具合です。 そして目的の画像検索結果、 例えば 山で検索して <!-- <img class="rg_i Q4LuWd tx8vtf" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==" data-iid="0" data-iurl="https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcRFWZJ-G8GOvPEcPPJZqy_IqLTMokKOyW_VAdDON2S_9V6cnOQZ" jsname="Q4LuWd" alt="「山」の画像検索結果" /> --> ↑この要素が欲しいものです ここのimgのclassにrg_i というものがありこれはヒントの一つ?かと想像したりするのですが data-iurl= のこれが取得したい画像のURLだと思います。 URLで hrefでなく こういう書式で表示されているのだな、と思いますが ここを取得したいと思っております。 すみませんが;宜しくお願い致します;
497 名前:デフォルトの名無しさん [2020/02/06(Thu) 11:42:27 ID:GAMNd4TG.net] >>490 左様でございますか。一応使ったことはありますが ちゃんと使いこなせるのかどうか…うーむ…
498 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 12:10:59 ID:xAE/eJ0Q.net] 改行を含めてfindする方法ってないですか?
499 名前:デフォルトの名無しさん mailto:sage [2020/02/06(木) 12:25:05.18 ID:PruBe/51.net] >>492 他に使ってなさそうで欲しい属性分かってるんだったら elems = html.select('img[data-iurl]') これでよくね あとfirefox10でも47でもないいい加減なUAはやめとけ
500 名前:デフォルトの名無しさん mailto:sage [2020/02/06(Thu) 12:35:55 ID:/hIhK6yv.net] 要素を非同期処理で読み込むから、要素が存在しないとか、 サイトの構成が変わったとか、 XPath/CSS セレクターが間違っているとか、 相手がアクセスをブロックしてくるとか スクレイピングは、相手のサイトを分析するのが難しいのと、 適切に限定される、セレクターを作るのが難しい API が公開されているなら、APIを使った方がよい 漏れは、Ruby で、Selenium WebDriver, Nokogiri などで、 Chrome, Edge などのブラウザーを自動操作して、スクレイピングするけど ここに書いておいた 【VBScript】WSHについて話し合うスレ【JScript】 https://mevius.5ch.net/test/read.cgi/tech/1578522041/24-27
501 名前:デフォルトの名無しさん [2020/02/06(Thu) 12:41:43 ID:zAec24ND.net] >>494 改行=\n または \r\n
502 名前:496 mailto:sage [2020/02/06(Thu) 12:45:42 ID:/hIhK6yv.net] >>492 Base64 は、HTML でもよく使う Base64の文字列で、PNG/JPEG画像を、HTMLファイルに直接埋め込める <img src="data:image/png;base64,xxxxx..." />
503 名前:496 mailto:sage [2020/02/06(木) 12:59:31.10 ID:/hIhK6yv.net] >>492 適切に、1つに限定される、セレクターを作るのが難しい! 以下で、特定できないのか? class="rg_i Q4LuWd tx8vtf" data-iid="0" jsname="Q4LuWd" それか、img 要素の外側で、id など、限定される要素を探すか。 基本的には、idを探さないと特定できない idを振っていない場合は、そのサイト特有のルールを発見しないといけない! 例えば、5ch のスレ内では、id が無いから、 data-id に投稿番号が入っているので、それを使うとか このように、相手のサイトを分析するのが難しい!
504 名前:デフォルトの名無しさん [2020/02/06(Thu) 13:30:53 ID:GAMNd4TG.net] >>495 firefoxのUA、修正します。すみませんでした; そして、以下でやってみましたが elems = html.select('img[data-iurl]') なぜか出来ずに、うむむ…と申し訳ありません、さらに研究してみますが…
505 名前:496 mailto:sage [2020/02/06(木) 14:30:31.06 ID:/hIhK6yv.net] >>496 にも書いたけど、 要素をAjax で非同期処理に読み込むから、またimg 要素が存在しないとか? Ruby で、Selenium WebDriver を使えば、要素が出現するまで、自動的にwait する。 await みたいに、非同期処理を同期的に書ける
506 名前:496 mailto:sage [2020/02/06(木) 14:34:29.34 ID:/hIhK6yv.net] もっと簡単に、10〜20 秒ぐらい、sleep したら、img 要素が出現しないのか?
507 名前:デフォルトの名無しさん [2020/02/06(Thu) 16:58:26 ID:GAMNd4TG.net] 一応成功致しました! >>500 結果としてelems = html.select('img[data-iurl]') で、このelemsとしては取れていたようです! ここは元々elems = html.select('.rg_meta.notranslate') であったと最初に出しましたが このelemsを ↓(適当〜8行くらい) ------------------ for ele in elems: eledict = dict() ele = ele.contents[0].replace('"','').split(',') for e in ele: num = e.find(':') eledict[e[0:num]] = e[num+1:] imageURL = eledict['ou']・・・・・ -------------- というような感じで使っていたのですが img[data-iurl]の今回? 目的のurl自体はスムーズに取れていたようで for ele in elems: imageURL = ele.get('data-iurl') 今回elemsのeleを ele.get('data-iurl') で、1枚づつ取ることができたようでした。 有難うございました!
508 名前:デフォルトの名無しさん [2020/02/06(Thu) 20:03:36 ID:bDkEju7l.net] asyncioってわかる人いますか?
509 名前:デフォルトの名無しさん [2020/02/07(金) 07:27:17 ID:cGGfIEk4.net] 知ってるよ(どの程度を期待してるのか知らないけどな)
510 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 07:30:51.90 ID:u54KGCZV.net] thread threading multiprocessing concurrent.futures asyncio この辺の違いがよく分からない
511 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 08:43:13.34 ID:sQ9sQIGh.net] >>506 それらはOSやCPUを自力で作れる神クラスの技術者でないと理解できないし、使いこなせないと思う 一般人である自分もドキュメントを読んでみたが、チンプンカンプン(死語)だった さっさと忘れてPythonを楽しみましょう
512 名前:デフォルトの名無しさん [2020/02/08(土) 10:13:41 ID:gJJFnkpu.net] GUIやるなら、threadかasyncioのどちらかは必須。
513 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:16:19 ID:I0dCURwg.net] プロセスとスレッドの違いは知っておいて損はない
514 名前:デフォルトの名無しさん [2020/02/08(土) 10:19:32 ID:0YppiA+B.net] GUIやるならC#+VisualStudioが一番
515 名前:デフォルトの名無しさん [2020/02/08(土) 10:26:34 ID:iJq/sxyx.net] Macにも持っていけるの? >>510
516 名前:デフォルトの名無しさん [2020/02/08(土) 10:32:22 ID:0YppiA+B.net] Mac持ってないからわからん 俺は自分用ツールしか作ったことない
517 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 10:37:32 ID:VCX1KXbd.net] なんで情弱しか使わないMacに対応しなきゃいけないんですか!(半ギレ
518 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 11:10:45 ID:E/mrDwXz.net] Windowsは情強だけ使っていればよろしい
519 名前:デフォルトの名無しさん [2020/02/08(土) 11:12:38 ID:K7+uW5ie.net] シェア一割のくせに態度だけ見てると九割くらいありそうだよなw
520 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 12:15:26 ID:E/mrDwXz.net] Mac以外の残り9割の殆どがゴミ
521 名前:デフォルトの名無しさん [2020/02/08(土) 12:37:42 ID:W0we+YOR.net] 売れない芸人が一丁前に何か言ってるわ
522 名前:デフォルトの名無しさん [2020/02/08(土) 13:20:07.76 ID:iJq/sxyx.net] Windows/Mac/iOS/androidに対応したGUIを作ることができます そう、pythonならね
523 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 13:33:43.29 ID:9Nn74D/R.net] React Native + Expo アシアルのMonaca(Cordova/PhoneGap) + Onsen UI もある
524 名前:デフォルトの名無しさん [2020/02/08(土) 13:47:48 ID:YnTe+96U.net] 普通にWindowsで作ったC#はLinuxでもMacでもMonoで動くぞ
525 名前:デフォルトの名無しさん [2020/02/08(土) 13:48:05 ID:YnTe+96U.net] GUI含めて。
526 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 14:36:46.22 ID:FKWW677q.net] >>520 .netcoreだよね?
527 名前:デフォルトの名無しさん [2020/02/08(土) 14:46:34 ID:KXr/QwX0.net] Monoって書いてるだろ
528 名前:519 mailto:sage [2020/02/08(土) 15:35:46.13 ID:9Nn74D/R.net] C# では、Microsoft が、 >>519 や、Unity などに対抗するために、Xamarin/Mono を買収した
529 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 16:54:09 ID:DP9vcaNb.net] >>515 ワロタ!(・∀・)
530 名前:デフォルトの名無しさん [2020/02/08(土) 17:09:56 ID:Gwq8LIiY.net] Ruby禁止だけじゃなくMono/C#も禁止するか
531 名前:デフォルトの名無しさん [2020/02/08(土) 17:19:51 ID:szXf7gpM.net] qtって汚いよな
532 名前:デフォルトの名無しさん [2020/02/08(土) 17:28:08 ID:uuv8oSvR.net] RADツールもないもんな 知らんけど
533 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:29:00 ID:0wE1WgKD.net] >>515 開発者のMacのシェアは約30%、Windowsは約45%、Linuxが25% Windowsはシェア半分もない
534 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:46:35.97 ID:Ewdvkn0R.net] 世代交代しか訴えられないんじゃぁ、ぶてぃじぇっじもたいした候補じゃねーなぁ
535 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 17:51:48.56 ID:lxxY/dO6.net] やっぱ一番かっこいいのはkivy?
536 名前:デフォルトの名無しさん [2020/02/08(土) 20:33:49.47 ID:Y+Ds/PpP.net] >>506 、>>507 良くわかるけど Pythonやるにはあまり関係ないよ?
537 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 21:53:48 ID:tg7wd02h.net] >>506 ソフトエンジニアならわからないと馬鹿にされるんだろうが でも、この底辺スレに来る連中はエンジニアではなく低レベルのサンデープログラマが ほとんどで分からない奴が大多数だろ(もちろん俺もわからん)
538 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 22:16:28 ID:DP9vcaNb.net] >>506 プロセス(OSから見えてる単位)→スッドレ(プロセスの下にわさわさ増殖可能)→コア(CPUの部品) 1プロセス=1CPU プロセスとプロセスの間の情報やり取りはゲキムズ&低速。 スッドレとスッドレの間はやり取りOKだけど、 メモリを奪い合わったり書き換えっこになったりしないように要注意。 あと、旧来は1スッドレ1コアが普通だったけど、 今は2スッドレ1コアが普通になりつつあり、 多スッドレ→1コアする場合はメモリ領域の扱いに注意が必要。 (どのスッドレも同時にみんな手をつないでゴール!を強要されない計算の場合は) 1つのプロセスからいっぱいスッドレわかせて計算するより、 いっぱいプロセス湧かせて順次まとめあげる方が、高速&効率が良いはずである。 だが、 多プロセス化するとメモリはもっさり消費される傾向なので、 ほんとのところは、 やりたいことが同期を強く求めてるかどうかと、マシンスペックによるのである。
539 名前:デフォルトの名無しさん [2020/02/08(土) 22:17:55 ID:0YppiA+B.net] 突っ込まないぞ
540 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 22:18:40 ID:0wE1WgKD.net] スッドレスッドレ (わさわさ)
541 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 22:31:02 ID:DP9vcaNb.net] (つづき) さきにあげた並行処理をPythonにさせるとき使うライブラリが506の質問であがってるさいしょの3ツ。 threading : スッドレをいっぱいわかせることができる(マルチスッドレ) multiprocessing : プロセスを複数作れる ケツ2つはやはり並行処理なのだが、 「ノンブロッキング処理」とゆうのをさせるためのもので、 投入されたPythonのバージョンが違う(concurrent.futuresの方が古い)のと、 とっつきやすさが違う(concurrent.futuresの方が人類にはとっつきやすい)。 これらを使うメリットがあるのは下の3条件を満たしてるとき。特に3についてはよく考えろ。 1.過程で、ボトルネックなクソ重い処理がある 2.それが何度もやってくる 3.ボトルネックの通過完了時刻が全部バラバラになってもおk(追い越しOK)で、 最終的にまとまればいい。 もっと詳しくは ggってHitした↓でもよんでくれ。 ttps://qiita.com/icoxfog417/items/07cbf5110ca82629aca0
542 名前:デフォルトの名無しさん mailto:sage [2020/02/08(土) 22:31:57 ID:DP9vcaNb.net] ココハ ゴジャースナ(・∀・)スッドレ ダヨ!!!
543 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 01:28:40 ID:JzPk4jqf.net] >>534 ハードウェアマルチスレッディングとソフトウェアによる通常のマルチスレッドをごちゃまぜに理解してるようだな。 勉強してからもう一度書き込むように。
544 名前:デフォルトの名無しさん [2020/02/09(日) 07:52:13.11 ID:CdDouLVX.net] >>> (10).to_bytes(2,'big') b'\x00\n' 期待している結果となりません。 b'\x00\x0a' にならないのは何故?
545 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 08:44:46 ID:vHnIKgeN.net] >>540 ドキュメントのbyteオブジェクト関連の項目を読むと書いてあるが 文字として見せた方がわかりやすいと思われるバイト値は 16進ではなく文字で表示する方針なのだそうだ だから値としては正しく格納されているので気にしなくてよろしい
546 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:24:21 ID:CdDouLVX.net] >>541 納得しました 誰得の方針なのか、モヤモヤは残りましたが…
547 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:30:32 ID:vHnIKgeN.net] >>542 ところで、この(値).to_bytes()っていう書き方は初見なんだが いつからある機能なんだろうか(自分の知識はver.3.3で止まっている) JavaっぽくてPythonらしくないと感じるのだが
548 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 09:51:55.28 ID:CdDouLVX.net] >>543 int.to_bytes(length, byteorder, *, signed=False) New in version 3.2. だそうです
549 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:38:09 ID:hMxVM0F3.net] flaskでsms認証つけたいんですけど何がおすすめでしょうか? アカウントにユーザーのメルアド、氏名、住所もつけておきたいです。
550 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 10:56:43 ID:vHnIKgeN.net] >>544 サンクス 一つ賢くなったよ
551 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:03:20 ID:uG+JJfG5.net] 知識が増えただけで賢くはなって無いんじゃないの
552 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:07:52 ID:vHnIKgeN.net] >>547 人の会話に茶々入れるんじゃないよ 即NGだ
553 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:26:42 ID:uG+JJfG5.net] 会話に茶々入れたくなければ公開掲示板なんかで聞かなきゃいいじゃん つまりいくらでも茶々入れていいのが2ch5chでしょ その基本を無視して俺ルールをいきなり押し付けられても困る で、賢さってのは知識量のことなワケ?
554 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:27:51 ID:uG+JJfG5.net] だって「超初心者」が知識と賢さを混同してるらしいからね ほっとけないね
555 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:32:14 ID:EbhgtQ51.net] >>539 >ハードウェアマルチスレッディングとソフトウェアによる通常のマルチスレッドをごちゃまぜに理解 そのようだ… ありがとう そしてありがとう Pythonのライブラリでやれるのは ソフトウェア的マルチスッドレだな
556 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 11:34:06 ID:EbhgtQ51.net] というわけで >>506よ、 536のことはうっちゃっておいて >>537の先頭2行も脳内から消して、詳しくはケツに貼ったQiitaの人の記事を読んでクレクレ
557 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:11:02.39 ID:vWZlCr2H.net] list = [1,2,3,4,5,6,7,8,9,10] というリストがあった場合 for i in list: とするよりも for i in set(list): とする方が高速ですか? それとも、setに変更しても元々がリストなので早くならないですか?
558 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:16:47 ID:uG+JJfG5.net] 一般的には想定される普通の使い方をする時に一番早くなるように言語を作る それに間に一枚噛んでると遅くなる、と思うのが人間 あとは長さ10万くらいのリストを数千回試して時間を計る
559 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:26:35 ID:mfrF5HLR.net] >>553 試すといいよ。ってのが正しいと思うけど、あえてマニュアルから。 https://docs.python.org/ja/3/reference/compound_stmts.html#the-for-statement > 式リストは一度だけ評価されます。 ってあるから、ほぼ変わらんのでは?
560 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:44:06 ID:zgc2MTJg.net] list->setのコスト分だけ遅いだろ
561 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 12:53:21 ID:2kp9QhUs.net] 論より証拠 昔の人は良いことを言った
562 名前:デフォルトの名無しさん [2020/02/09(日) 13:38:53 ID:haksjRuS.net] お前ら木偶の坊なんだから俺の疑問に答えて少しは世の中の役に立てよ という意識があのような質問を生むのだ
563 名前:デフォルトの名無しさん [2020/02/09(日) 14:44:11 ID:KmTvxb40.net] >>555 sum(for x in range(10)) sum([for x in range(10)]) これの違い。
564 名前:デフォルトの名無しさん [2020/02/09(日) 14:49:31 ID:KmTvxb40.net] sum(x for x in range(10)) sum([x for x in range(10)]) だった。
565 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 14:56:02.52 ID:OACAfflF.net] >>560 どう違うの? 下は内包表記?
566 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 15:22:07.62 ID:O6Vx4x7H.net] >>553 listをsetに変換するコストを無視してもsetをイテレートするほうが遅いよ hash tableをイテレートする時に必要な処理とlistをイテレートする時に必要な処理の違い といってもその差は微々たるものだから その差が重要なプログラムを書こうとしてるなら言語を変えたほうがいいかも
567 名前:デフォルトの名無しさん [2020/02/09(日) 15:35:28.11 ID:vWZlCr2H.net] >>554-562 ありがとうございます あまり大きくは変わらないのですね 参考にします
568 名前:デフォルトの名無しさん [2020/02/09(日) 15:45:54.02 ID:wTv3WydA.net] >>561 上: generator (リストは造らない) 下: 内包表記 (リストが造られる)
569 名前:デフォルトの名無しさん [2020/02/09(日) 15:54:02.80 ID:KmTvxb40.net] for i in set(list): listのイテレートとsetのイテレートが発生するのと、一旦setのためのメモリが確保されるから、 setの重複排除機能が必要でない限り、100%無駄だと断言できる。
570 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 16:12:45 ID:O6Vx4x7H.net] >>563 複数のやり方でどれが速いのか気になったら%timeitしよう
571 名前:デフォルトの名無しさん [2020/02/09(日) 16:14:09 ID:wTv3WydA.net] むしろforの中身を見直すか numpyとか使うべき ループはクソ遅い
572 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 21:20:07.67 ID:U6aZQoQk.net] 質問者はリストにin演算子使うと遅いって話と混同してるんじゃないかと そっちは遅くて当たり前なんだが、forでsetより遅くなる道理はないと思うが
573 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 22:35:43 ID:u7Xk0tZr.net] >>568 >そっちは遅くて当たり前なんだが その当たり前を教えてくれ
574 名前:デフォルトの名無しさん mailto:sage [2020/02/09(日) 23:21:11 ID:U6aZQoQk.net] >>569 setはハッシュ値で格納位置を一発で割り出す リストは要素をすべて舐め回して探す
575 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:00:12 ID:NX1L632S.net] >>568 リストをfor文を回してsetより速くする方法が他にあるってことですか?
576 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 00:07:40 ID:fRmEVRio.net] >>570 リストって、毎回全要素をリニアサーチしているって事ですか?
577 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 01:46:01.93 ID:y8VN1gM7.net] >>571 >>568 で >forでsetより遅くなる道理はないと思うが と言っている。で、これから >リストをfor文を回してsetより速くする方法が他にあるってことですか? がなぜ出てくるんだ? >>568 の前の部分はfor~inについてではなく、 list/setの要素にこれ(x)ある?を調べるin演算(x in list/set)についての ことを言っている。
578 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 07:54:06.49 ID:NX1L632S.net] >>573 なるほど、ありがとうございます
579 名前:デフォルトの名無しさん [2020/02/10(月) 09:51:35 ID:5lt6zYiz.net] >>572 570はサーチとイテレートをごっちゃにしてるわな。 listは動的配列だから、オブジェクトへのポインタのポインタをインクリメントしてるだけだわな。 サーチはその後の話だろ。
580 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 09:58:28 ID:8uBZGbTk.net] >>575 いや君がごっちゃにしてるだけでイテレートの話なんてしてないだろ 570はin演算子使った時にどうやって探すかの話だろ
581 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 16:12:22 ID:fRmEVRio.net] 色々脱線はしているのかもしれないが、最初の質問は >>553 で リストを処理するのに、そのままよりも、 setを噛ませた方が速くなるかどうか、ということであって リストの内容は全件処理しているようだし
582 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:20:59 ID:8uBZGbTk.net] なに意味不明なことうだうだ言ってんの
583 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:29:20 ID:fRmEVRio.net] 568 名前:デフォルトの名無しさん[sage] 投稿日:2020/02/09(日) 21:20:07.67 ID:U6aZQoQk 質問者はリストにin演算子使うと遅いって話と混同してるんじゃないかと そっちは遅くて当たり前なんだが、forでsetより遅くなる道理はないと思うが 570 名前:デフォルトの名無しさん[sage] 投稿日:2020/02/09(日) 23:21:11.41 ID:U6aZQoQk >>569 setはハッシュ値で格納位置を一発で割り出す リストは要素をすべて舐め回して探す この辺の説明を ID:U6aZQoQk がちゃんとすれば良いんだと思う
584 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:38:58 ID:8uBZGbTk.net] 逆になにがわからないのかわからないんだが
585 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:42:34 ID:fRmEVRio.net] 分かるまで、みんなの話を聞いていたら
586 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:44:23 ID:fRmEVRio.net] 553 名前:デフォルトの名無しさん[sage] 投稿日:2020/02/09(日) 12:11:02.39 ID:vWZlCr2H list = [1,2,3,4,5,6,7,8,9,10] というリストがあった場合 for i in list: とするよりも for i in set(list): とする方が高速ですか? それとも、setに変更しても元々がリストなので早くならないですか? これが最初の質問
587 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:47:57 ID:fRmEVRio.net] この質問で想定される回答は for i in set(list):の方が高速 どちらも変わらない set 使わない方が高速 この三通りじゃないかと思うが
588 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:55:55 ID:cKG4UD69.net] >>580 俺も何がわからないのかわからん in演算子が何かわかってないから >>568や>>570に書いてることが理解できないんじゃないかな と想像してみる
589 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 17:59:57 ID:cKG4UD69.net] >>583 それはもう回答が出てるでしょ んで普通に考えたらsetにしたほうがが速いという考えにはならないのに setのほうが高速かもしれないと思ってしまってるのは for loopのfor x in fooの`in`と contains(foo, x)を演算子にしたin演算子の`in`とを勘違いしてるんじゃない? ってコメントが>>568
590 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:20:13.36 ID:fRmEVRio.net] 回答までにしか興味は無いです 後は、妄想も含めた雑談なわけだし
591 名前:デフォルトの名無しさん mailto:sage [2020/02/10(月) 18:21:49.94 ID:8uBZGbTk.net] >>584 そういうことかね >>585 前にQiitaでリストにin演算子使うと遅いっていう記事がバズってたからね そういうの見て質問者が漠然とリストはsetより遅いって思い込んでしまった可能性はあるね
592 名前:デフォルトの名無しさん [2020/02/10(月) 19:06:26.64 ID:NX1L632S.net] >>584 質問者ですがそうです setのforループの方が早いのかと思い込んでいました >>574 で自分の勘違いに気づいたところです