1 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:34:15.87 ID:7AoJbiyO.net] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その33 echo.2ch.net/test/read.cgi/tech/1490424742/
2 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:35:12.02 ID:bw/VOywX.net] >>1 乙
3 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:35:27.98 ID:7AoJbiyO.net] 関連スレ Pythonのお勉強 Part53 echo.2ch.net/test/read.cgi/tech/1494683284/ ◆関連リンク Python の Home Page ttp://www.python.org/ ◆長いコードはこういうところにはってください ttp://ideone.com/ ttp://codepad.org/ ttp://pastebin.com/ ttp://dpaste.com/ ttps://try.jupyter.org/ ◆まとめwiki ttp://python.rdy.jp/ ネットにはデマ情報がいっぱい残ってるので正しい情報をメモ cmd で UTF-8 使える方法 (chcp 65001 について) ttp://nazochu.blogspot.jp/2011/08/blog-post_26.html mintty ttp://dogmap.jp/2011/11/15/mintty/ mintty ttp://tanakh.jp/posts/2011-11-15-windows-terminal.html ↓ 色々紆余曲折
4 名前:あったけど Git インスコして GitBash 使うのが一番楽っぽい https://git-for-windows.github.io/ [] [ここ壊れてます]
5 名前:デフォルトの名無しさん mailto:sage [2017/05/28(日) 20:40:30.00 ID:7AoJbiyO.net] 関連スレ Matplotlib でグラフプログラミング【Python】 echo.2ch.net/test/read.cgi/tech/1256385982/ ディープラーニング echo.2ch.net/test/read.cgi/tech/1457792560/ (DAT落ち) 人工知能ディープラーニング機械学習のための数学 echo.2ch.net/test/read.cgi/tech/1482808144/ 【統計分析】機械学習・データマイニング15 echo.2ch.net/test/read.cgi/tech/1492344216/ 【Python】Python Webフレームワーク総合スレ tamae.2ch.net/test/read.cgi/php/1329996601/ 【Python】TurboGearsスレ Part 1【Framework】 tamae.2ch.net/test/read.cgi/php/1176022606/ Google App Engine for Python 6アプ目 tamae.2ch.net/test/read.cgi/php/1358570953/ Python CGI tamae.2ch.net/test/read.cgi/php/1163513344/
6 名前:デフォルトの名無しさん [2017/05/29(月) 13:26:13.77 ID:gnWdEBVU.net] 5年以上前の過去ログへのレスですw toro.2ch.net/test/read.cgi/tech/1322115727/ > 113 :デフォルトの名無しさん:2011/12/07(水) 15:17:31.93 > ある本に書いてあったのですが、 > from math import sqrt > psqrt(pow(4.5-4.2,2)+pow(1-1,2)) > のようにすると、 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > NameError: name 'psqrt' is not defined > のようなエラーが出ます > これはどのようにすればいいのでしょうか? この書籍はオライリーの『集合知プログラミング』(初版)だと思われますが、 同じエラーを経験しましたが、これは見ての通り 文脈からしてpsqrtをsqrtに直せばいいだけだと思いますが、 そもそもpow関数の引数に入れる値が間違っているようです。 この書籍の正誤表がネット上にあります。 https://sites.google.com/site/prgclctintelligence/errata この正誤表の訂正前の記述もこの初版とは異なりますので要注意。
7 名前:デフォルトの名無しさん [2017/05/29(月) 22:29:35.86 ID:5gJ1PeLc.net] 条件がTrueの時はABC、条件がFalseのときはBCのように (A)BCの(A)の部分を条件で追加したいのですが test = [['あいうえお', 'アイウエオ', 'ア'], ['かきくけこ', 'カキクケコ', ''], ['さしすせそ', 'サシスセソ', 'サ'], ['たちつてと', 'タチツテト', '']] result = [] for i in test: x = '' if i[2]: x += '【{0[2]}】\n'.format(i) result.append(x + '{0[0]}\n{0[1]}'.format(i)) print('\n\n'.join(result)) これを内包表記で作成したいのですが result = ['【{0[2]}】\n{0[0]}\n{0[1]}'.format(i) if i[2] else '{0[0]}\n{0[1]}'.format(i) for i in test] 条件でformatを切り替える以外に方法ありますでしょうか?
8 名前:デフォルトの名無しさん [2017/05/30(火) 10:49:29.89 ID:gxWnkgCC.net] おまえ向いてない
9 名前:デフォルトの名無しさん [2017/05/30(火) 10:59:08.01 ID:ItunGfv1.net] >>6 result = ['\n'.join(( '【' + i[2] + '】', i[0], i[1])) if i[2] else '\n'.join((i[0], i[1])) for i in test] print('\n\n'.join(result))
10 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 11:14:07.76 ID:C9qHY4kc.net] >>7 最終的な目的がわからんのだが、他の方法でやりたい理由は? 単にスマートに書きたいってだけ?
11 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 11:14:43.87 ID:C9qHY4kc.net] アンカ違ってた。>>6 ね。
12 名前:デフォルトの名無しさん [2017/05/30(火) 11:46:52.81 ID:ItunGfv1.net] >>6 def trans(s): if s[2]: return '【' + s[2] + '】', s[0], s[1] return s[0], s[1] result = ['\n'.join(trans(i)) for i in test] print(*result, sep='\n\n')
13 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 14:23:14.01 ID:6yum6/wf.net] >>8 ,11 ありがとうございます。 参考にさせていただきます。 >>9 条件で文字を表示あり・なしみたいなのができたらいいなと思って 最初に内包表記で作ったのが result = ['【{0[2]}】\n'.format(i) if i[2] else '' + '{0[0]}\n{0[1]}'.format(i) for i in test] うまくいかなくて いま試しにかっこつけてみたら思った通りになったんだけどかっこって大丈夫なのか? result = [('【{0[2]}】\n'.format(i) if i[2] else '') + '{0[0]}\n{0[1]}'.format(i) for i in test]
14 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 14:30:48.01 ID:6yum6/wf.net] リストにしなくてもこれでいけそう flag = True test = 'あいうえお' + ('かきくけこ' if flag else '') + 'さしすせそ' print(test) どうもありがとうございました。
15 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 15:33:34.98 ID:C9qHY4kc.net] そこにこそformat()だろ。 test ='あいうえお{}さしすせそ' .format('かきくけこ' if flag else '')
16 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 17:10:33.37 ID:6yum6/wf.net] >>14 ありがとう 確かにこっちのほうがきれいだ
17 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 17:27:38.44 ID:8uTEYK+9.net] きれいだ
18 名前:age [2017/05/30(火) 18:54:13.25 ID:cPI0fzDZ.net] 実行完了後に端末を閉じたい exit()で終了すると思ったのですが終了しませんでした。 https://ideone.com/wTEMeN
19 名前:age [2017/05/30(火) 20:36:57.55 ID:cPI0fzDZ.net] どなたか、解決法を知りませんか?
20 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 20:38:35.97 ID:kWERrntF.net] 多分無理
21 名前:age [2017/05/30(火) 21:14:57.92 ID:cPI0fzDZ.net] そこを何とかお願いします 最初の1秒の間にエンター押したら起動後に消えてくれます
22 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 21:21:20.61 ID:Oby1Oa62.net] 端末のプロセスをキルしたらいけるか?
23 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 21:30:38.96 ID:sm3ZD28q.net] >17 tesut じゃなくて、 test って書いてほしい。 import os import signal input("hit Enter to close the console") is.kill(os.getppid(), signal.SIG_DFL) これでターミナル閉じたよ。wundows
24 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 21:32:13.67 ID:sm3ZD28q.net] >22 is.kill じゃなくて、 os.kill 誤字すいません。
25 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 21:48:21.02 ID:Oby1Oa62.net] wundows
26 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 21:55:40.69 ID:sm3ZD28q.net] 重ね重ね、誤字ばかりで、申し訳ない
27 名前:デフォルトの名無しさん [2017/05/30(火) 22:43:31.29 ID:f/2fyGyA.net] d を辞書としたとき、 for k in d.keys(): と for k in d: は等価ですか? 等価だとして、どちらが早いですか?
28 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 22:47:46.61 ID:Eop9uX5M.net] そこの速度差は誤差でしょ
29 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 22:53:39.93 ID:kWERrntF.net] >>26 dからkeysを探して呼び出す手間が入るから等価ではない、速度差は上にも書いてある通り誤差だろうが
30 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:03:14.12 ID:WkZkNXY5.net] >26 disっていう標準モジュールで、バイトコードを逆アセンブルした結果を見れるよ。 既に指摘のある通り、 d.keys()だと LOAD_ATTR CALL_FUNCTION が余計に入る。 実行時間は、誤差の範囲と思う。
31 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:06:38.21 ID:f/2fyGyA.net] >>27-29 ありがとうございました。 for k in d: のほうが速いというのは意外でした。 [] [ここ壊れてます]
33 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:28:27.47 ID:f/2fyGyA.net] D1, D2 は集合。 D = (D1, D2) は M のインスタンス変数。 d は辞書で、 M のインスタンス変数。 for r in M.D[0]: ■■for c in M.D[1]: ■■■■if (r, c) in M.d: というようなコードを↓のようなコードに置き換えると、 for ループのループ回数が多いとき、少しは速くなる でしょうか? ケースバイケースだとは思いますが、↓のような方法で 少しは速くしようなどと考える人はあまりいないでしょうか? D1 = M.D[0] D2 = M.D[1] M_d = M.d for r in D1: ■■for c in D2: ■■■■if (r, c) in M_d:
34 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:30:27.91 ID:kWERrntF.net] >>31 俺ならitertools使う
35 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:34:04.54 ID:/DgUh2Dj.net] >>31 やってみりゃいいじゃん
36 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:36:14.34 ID:f/2fyGyA.net] >>32 ありがとうございます。 調べてみます。 >>33 実際に計算して計算時間を計るというのは思いつきませんでした。 やってみます。
37 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:48:47.28 ID:ah0rBcm0.net] 冗談きついぜ
38 名前:デフォルトの名無しさん mailto:sage [2017/05/30(火) 23:50:27.27 ID:wCTc2Yir.net] 大差ないと予想
39 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 00:06:13.82 ID:gBIsA548.net] >>31 for name in expr:のexprは最初の一度だけ評価されてイテレーターになるので ローカル変数にexprの結果を割り当てても、その手間分コストが増えるだけじゃないかな docs.python.jp/3/reference/compound_stmts.html#the-for-statement
40 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 00:08:40.56 ID:yq0731FK.net] 当たった
41 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 00:19:23.90 ID:eDo7CzNQ.net] >>37 なるほど、そうでしたか。 ありがとうございました。 内側の for 文の in の後の集合は毎回評価されるのかと思っていました。
42 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 00:21:53.01 ID:eDo7CzNQ.net] あ、でもやっぱり B は毎回評価されるような気がします。 例えば、↓のようなコードを考えると B は毎回評価されないとダメな気がします。 for i in A: →ここで B を変更する ■■for j in B:
43 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 00:42:01.43 ID:yq0731FK.net] 超初心者はパフォーマンスなんか気にするなよ
44 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 01:50:21.04 ID:jDvWEkkq.net] 何十万回もループを回すような場合だと、ローカル変数への割当は、数十ミリから数百ミリ秒の高速化になった記憶がある。 あと、ネストしたリストへのアクセスは遅いので、 a[m][n]に二重ループでアクセスする時は、 am=a[m] と1つめのループの中でしておいてから、 二つ目のループの中では、 am[n]としてアクセスした方が、速くなる。 これは、ループが1000回くらいでも、ミリ秒単位でちゃんと差が出る。 もちろん、index使ってのアクセスよりも、 for elem in lst: としてイテレータ使う方が速い。 profiler使うと、関数単位でどこに時間が、かかっているか分かるので、オススメ。 SpyderとかのIDEに組み込んであるのが使いやすいと思う。 高速化に興味があるなら、ハイパフォーマンスPythonっていう本がオライリーから出てるから、参考にしてみては?
45 名前:デフォルトの名無しさん [2017/05/31(水) 08:01:32.80 ID:k6UVBo1S.net] パフォーマンスよりpythonらしい書き方かどうかを気にすべき
46 名前:age [2017/05/31(水) 11:32:43.74 ID:u7MalF/7.net] >>22 どうやら僕の環境では無理な用です Geany1.27 F5起動 python3.5.2 返信遅れました ありがとう
47 名前:ナす(気持ちだけ) [] [ここ壊れてます]
48 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 11:36:28.46 ID:AV1cHHAT.net] >>17-23 プロセスには親子関係がある。 端末からPythonを起動すれば、親は端末で、子はPython 親を終了すれば、子も強制終了されるから、正常な終了ができない。 メモリ上にあるデータが、保存されないかも 普通サーバーなどは、デーモン化して、親プロセスをなくす。 そうすれば、親が終了しても、無関係だから安全
49 名前:デフォルトの名無しさん [2017/05/31(水) 13:02:32.85 ID:8pr90v8J.net] for a in [1,2,3,4,5]: [tab]print(a) ←インデントする print("こんにちわ") ←インデントしない 「python入門教室」のサンプルでこんなコードがあって、 インデントしない部分は繰り返されませんよみたいなことを教えたいようなのだ 普通にこんにちわを続けてインデントしなかったせいで SyntaxError: invalid syntax って出て実行できないんだが。 これって本がおかしいですよね? ちなみにコマンドプロンプトでやってます
50 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 13:48:49.94 ID:gBIsA548.net] >>46 たぶん対話シェルへの入力としては間違っているという話ではないかと インデント潰れるけど対話シェルのプロンプトを再現するとこういうことだよね? >>> for a in [1,2,3,4,5]: ... print(a) ... print("こんにちわ") # ...(二次プロンプト)の部分にインデントを下げて入力した File "<stdin>", line 3 print("こんにちわ") ^ SyntaxError: invalid syntax >>> print("こんにちは")はfor文とは独立した文だから>>>の行に入力しないとエラー 対話シェルの仕様による制限なので(pythonの構文としては間違ってない)本の説明不足かなあ これwebのドキュメントにも詳しくは載ってないな、分かりにくいね https://docs.python.jp/3/tutorial/interpreter.html
51 名前:デフォルトの名無しさん [2017/05/31(水) 14:01:00.73 ID:8pr90v8J.net] >>47 ありがとうございます。 本だと、こんにちわをfor文に組み込んだら 1 2 3 4 5 こんにちわ みたいな結果が出ると書かれてました。 わかりづらいので該当部分載せます i.imgur.com/V46Hrjy.jpg i.imgur.com/xzyC4jE.jpg
52 名前:デフォルトの名無しさん [2017/05/31(水) 14:08:38.39 ID:8pr90v8J.net] もしかして、メモ帳から作成したファイルなら実行できるとかですか?
53 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 14:20:04.68 ID:gBIsA548.net] >>49 (メモ帳がpythonに適しているかは疑問だけど)できます ページの上のほうにexample-04-03-01.pyとファイル名が書かれてるので スクリプトファイルの編集&実行を前提にした(not対話シェル)項目っぽい
54 名前:デフォルトの名無しさん [2017/05/31(水) 14:20:38.02 ID:nBc8lPEG.net] docs.python.jp/3.5/tutorial/introduction.html#first-steps-towards-programming >複合文を対話的に入力するときには、(パーザはいつ最後の行を入力したのか推し量ることができないので) 入力の完了を示すために最後に空行を続けなければなりません。 >>49 はい
55 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 14:21:40.07 ID:AV1cHHAT.net] メモ帳は、プログラミングに使えない メモ帳で保存したテキストには、 BOM(Byte Order Mark)という余計なデータが付くから、正常に実行できない TeraPad など、他のエディタを使うべき
56 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 14:25:41.25 ID:2JRCyRNh.net] >>49 他の人も書いてくれているが、 普通はメモ帳じゃなくてIDEやエディタを用意する。 python エディタでぐぐるといい。
57 名前:デフォルトの名無しさん [2017/05/31(水) 14:27:57.89 ID:8pr90v8J.net] >>51 この本、最初のほう飛ばし読みして分かったのですが、すべてIDLEで学習していく本みたいです・・・。 しかし、IDLEでも結果はエラーになりました・・・。 >>> # coding:utf-8 >>> for a in [1,2,3,4,5]: print(a) print("こんにちは") SyntaxError: invalid syntax
58 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 14:35:41.32 ID:2JRCyRNh.net] >>54 ちゃんと人のレス読んでるのか? >>51 >入力の完了を示すために最後に空行を続けなければなりません。 >すべてIDLEで学習していく本 >>48 の画像に「example04-03-01.py」とか書いてあるからそれは無いだろ。 ちゃんと1ページづつ追って読んでいけ。
59 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 14:38:09.83 ID:5PA7tv0u.net] >>54 IDLEのshellじゃなくてFile→New Fileでエディタ起動してコード書き込んで保存してF5押せばいい
60 名前:デフォルトの名無しさん [2017/05/31(水) 14:45:30.56 ID:8pr90v8J.net] >>55 エンター押しても空行になりませんでした...
61 名前:デフォルトの名無しさん [2017/05/31(水) 14:46:44.92 ID:8pr90v8J.net] そもそもコマンドプロンプトで出来ないコーディングとシェルでしか出来ないコーディングがある時点でパンクしそう..
62 名前:デフォルトの名無しさん [2017/05/31(水) 14:50:17.67 ID:8pr90v8J.net] >>56 EmEditerでやったら同じソースなのに今度はユニコードエラーが発生 もうわけわからない...
63 名前:デフォルトの名無しさん [2017/05/31(水) 14:58:15.81 ID:8pr90v8J.net] あ、new fileでやったら動きました ありがとうございました... 失礼しました
64 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 15:03:15.04 ID:tJJiEo5p.net] >>22 OKだよ >>45 それは仕様であって>>17 が考えること
65 名前:デフォルトの名無しさん [2017/05/31(水) 15:05:12.06 ID:u7MalF/7.net] >>59 慣れないとインデントは辛い https://ideone.com/ctsQT8
66 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 15:05:56.71 ID:2JRCyRNh.net] >>57 エンターを押した時点でforループが実行(完了)される。 >>> for a in [1,2,3,4,5]: ... print(a) ... 1 2 3 4 5 >>> print("こんにちは") こんにちは プログラミングやるならエディタで作成したファイルの文字コードは認識しとかなきゃダメ。 とりあえずUTF-8選んどけ。
67 名前:デフォルトの名無しさん [2017/05/31(水) 15:11:52.54 ID:u7MalF/7.net] ってか、>> ID 8pr90v8J は Android 5.0(Lollipop)を搭載したNexus 5 使ってるのか……。
68 名前:デフォルトの名無しさん [2017/05/31(水) 15:13:03.12 ID:8pr90v8J.net] >>63 emEditerのユニコードはshift-jisで動きました。 あとemEditerもIDLEも、空行なしでも動きました。
69 名前:デフォルトの名無しさん [2017/05/31(水) 15:23:34.95 ID:u7MalF/7.net] バージョンアップしてたらAndroid™ 6.0か…… どちらにしろ誤爆なので、見なかった事にして下さい
70 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 15:32:57.00 ID:tJJiEo5p.net] >>53 横だけどAtomをいれてみた。便利そう
71 名前:デフォルトの名無しさん [2017/05/31(水) 15:37:59.34 ID:u7MalF/7.net] お前、流石にその(画像は)引くわぁ〜 音楽もアニソンばかりだし、せめて水樹の曲入れるなら、田村の曲ももっと入れとけよ 花澤の再生回数だけ異様に多いな
72 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 15:56:09.33 ID:RyxKgJ03.net] 第二の照井君とはならなかった
73 名前:デフォルトの名無しさん [2017/05/31(水) 16:00:47.64 ID:nBc8lPEG.net] もうどこの誤爆か書いてけや
74 名前:デフォルトの名無しさん [2017/05/31(水) 16:36:23.41 ID:FdBBH6qG.net] オライリーのpython入門 不親切すぎる・・・
75 名前:デフォルトの名無しさん [2017/05/31(水) 17:28:49.67 ID:u7MalF/7.net] 誤爆 携帯の解像度から機種を特定→別スレから大学生と推測→携帯の販売時期を検索 →大学3〜4年と推測→ちょうど、nexus7 2012の修理方法を調べてた →正規復元方法を試す→不可→バッテリー交換しても電源が入らない→充電口の破損を確認→スイッチの異常か 基盤の異常かどちらか迷ってる→強い衝撃を与えたと聴いてる→どこスレで聞くか迷ってる間にアニソンすれに書き込み かと、思ったが、まさかのアニソンスレと誤爆
76 名前:デフォルトの名無しさん [2017/05/31(水) 17:30:09.80 ID:u7MalF/7.net] 最後の文はpythonスレで
77 名前:す [] [ここ壊れてます]
78 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 17:30:13.76 ID:ZnJVdbCY.net] >>71 python3入門にしなさい
79 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 18:54:55.13 ID:5+rNqd0l.net] プロジェクトごとにパッケージ分離したくてvenv使うとこまでは分かったんだけど どういう名前でどこに置くのが一般的? みんなプロジェクトのルートに「env」とかでおいてるんですかね
80 名前:デフォルトの名無しさん [2017/05/31(水) 19:45:41.57 ID:Qo+ozR8I.net] l がリストのとき、 if e in l: を多用すると極端に遅くなるんですけど、もしかして、線形探索して探していますか? s = set(l) if e in s: としたほうが速いですか? もしそうだとすると、自動的に if e in l: と書いたとき、 l を集合に変換して検索してくれればいいのにと思うのですが。
81 名前:デフォルトの名無しさん [2017/05/31(水) 20:27:26.92 ID:k6UVBo1S.net] >>76 listをいちいちsetに変換したら、単純に線形探索するより時間がかかるからね。 最初からsetで持っておけば?
82 名前:デフォルトの名無しさん [2017/05/31(水) 20:32:07.45 ID:u7MalF/7.net] setは順序を保持しないから、テストケースで失敗する事も有る 最後に結果をソートしても良いなら、気にしなくて良いんだけど……。
83 名前:デフォルトの名無しさん [2017/05/31(水) 20:36:26.64 ID:ac0fXejp.net] >>78 順序を保持しないコンテナのテストで順序をテストしようとしてるのがそもそもの間違い 素直にソートしれ
84 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 20:40:50.03 ID:cGjmnPnY.net] うせろガイジ
85 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 20:48:34.28 ID:jdtThzgG.net] こわ〜い
86 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 20:50:41.20 ID:gBIsA548.net] >>76 listはハッシュ値を返せないオブジェクトも入れられるので集合変換の条件満たせない 検索重視ならOrderedDictがいいんじゃない?(それかサードパーティ製のorderedsetとか)
87 名前:デフォルトの名無しさん [2017/05/31(水) 20:59:15.81 ID:ac0fXejp.net] >>82 OrderedDictをどうやって使うつもりや?言うてみい?
88 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 21:31:07.53 ID:Qo+ozR8I.net] >>77 なるほど。納得しました。 ありがとうございました。
89 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 21:32:19.57 ID:Qo+ozR8I.net] >>77-83 みなさん、ありがとうございました。
90 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 22:13:59.97 ID:Qo+ozR8I.net] Philip N. Kleinの『行列プログラマー』を読んでいて、はまっています。 M は行列を表わすクラスのインスタンスです。 M.D == (M.D[0], M.D[1]) M.D[0] は行列 M の行のインデックスです。 M.D[1] は行列 M の列のインデックスです。 M[i, j] で行 i、列 j の要素にアクセスできます。
91 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 22:17:31.36 ID:Qo+ozR8I.net] M.D[0] == M.D[1] で、行列 M は対称行列です。 ↓の二つのプログラムは、同じ動作をすると思ったのですが、 (1)は正しく動作せず、(2)は正しく動作します。 なぜだかさっぱり分かりません。なぜ(1)と(2)で異なる動作をするのでしょうか? (1) S = set() for i in M.D[0]: ■■for j in M.D[1]: ■■■■if i == j: ■■■■■■continue ■■■■elif i > j: ■■■■■■t = i ■■■■■■i = j ■■■■■■j = t ■■■■S.add(((i, j), M[i, j])) L = list(S) L = sorted(L, key=lambda e: e[1]) (2) S = set() for i in M.D[0]: ■■for j in M.D[1]: ■■■■if i == j: ■■■■■■continue ■■■■elif i > j: ■■■■■■S.add(((j, i), M[i, j])) ■■■■else: ■■■■■■S.add(((i, j), M[i, j])) L = list(S) L = sorted(L, key=lambda e: e[1])
92 名前:デフォルトの名無しさん [2017/05/31(水) 22:25:48.52 ID:6C3HqcgA.net] 六本木 ネットベンチャー系 2017年春の陣 file.takanoridayo.blog.shinobi.jp/dayo170301roppongi.png
93 名前:デフォルトの名無しさん [2017/05/31(水) 22:38:26.58 ID:u7MalF/7.net] 最後のelse文で i > j で無い。から
94 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 22:39:42.54 ID:Qo+ozR8I.net] ループ変数の値をループ内で変更するとまずいとかそういうことはありますか?
95 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 22:48:01.11 ID:Qo+ozR8I.net] もっと問題をシンプルにしてみましたが、やはり理解できない現象が 発生します。 なぜか(1)と(2)で結果が違います。これは同じになりそうですが。。。 (1) S1 = {1, 2, 3} S2 = {1, 2, 3} for i in S1: ■■for j in S2: ■■■■t = i ■■■■i = j ■■■■j = t ■■■■print((j, i)) (2) S1 = {1, 2, 3} S2 = {1, 2, 3} for i in S1: ■■for j in S2: ■■■■print((i, j))
96 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 22:49:02.56 ID:Qo+ozR8I.net] (1)の結果: (1, 1) (1, 2) (2, 3) (2, 1) (1, 2) (2, 3) (3, 1) (1, 2) (2, 3) (2)の結果: (1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
97 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 23:34:30.01 ID:jDvWEkkq.net] iを内側のループで書き換えているのだから、当然そうなる。
98 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 23:40:28.18 ID:Qo+ozR8I.net] >>93 馬鹿でした。ありがとうございます!
99 名前:デフォルトの名無しさん mailto:sage [2017/05/31(水) 23:45:14.36 ID:zosiqGOP.net] >>86 尼のレビューがひどいけど、線型代数はプログラムと別に学んだほうがいいぞ
100 名前:デフォルトの名無しさん [2017/06/01(木) 00:30:17.24 ID:25B895iy.net] pyautoguiを使った作業の自動化について教えてください。 以下の作業の自動化を試みています。 1.あるアプリケーションでファイルを読み込み、処理を行う →2.(処理を終えるまで待つ) →3.次のファイルで同じことをする(以下繰り返し) 2.の段階では現状、ファイルのサイズに合わせてsleep関数で調整していますが、 それだと、ちょっとした処理の遅れでタイミングが狂ってしまい、 以降の動作がうまくいかなくなる問題があります。 処理が終わって「クリックやキーボードなど、操作できるようになったよ」という 状態を認識する方法ってありますか。