1 名前:デフォルトの名無しさん mailto:sage [2013/01/21(月) 16:36:03.35 ] このスレッドは、他のスレッドでは書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。 エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。 騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。 次スレは >>985 辺りで 前スレ くだすれPython(超初心者用) その15 toro.2ch.net/test/read.cgi/tech/1350718465/ 関連スレ Pythonのお勉強 Part48 toro.2ch.net/test/read.cgi/tech/1358750040/ 【実験台】 Python 3.0 のお勉強 Part 1 【非互換】 toro.2ch.net/test/read.cgi/tech/1235050215/ ◆関連リンク Python の Home Page ttp://www.python.org/
49 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 14:36:03.53 ] >>46-48 動きました。 ありがとうございました。 (ur'「.*でした。') でuを付ける必要があったんですね。
50 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 16:36:47.34 ] >>49 uが必要なのは codecs.open で開いたから、読み込み時にunicodeへデコードされる為。 元のコード、うちでも期待通りに動いたよ。(python2.7/a.txtの文字コードはutf-8で試した) 原因は、テキスト・ファイルと正規表現の文字コードの不一致と診て間違いなさそう。 後、オフトピ。正規表現 ur'「.*?でした。' と最短一致が必要になるはず。
51 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:23:22.00 ] スクリプトファイル自身の文字コードが 動作に重大な影響を及ぼすのっていうのは スクリプト言語の重大な欠点だよね。 自分もWindowsのメモ帳が何のコードでテキストを 保存するかを知らないまま、職場でスクリプトを書いている。 書くのも実行するのもWindows環境である限り 問題ないのだろうけど、将来不安ではある。
52 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:29:04.29 ] >>50 原因まで、わかりやすく説明してくれてありがとうございます。 最短一致を使用すると出力が出てこなくなってしまいます。 どういうことか教えていただけませんか? 「A」はBでした。 『「.*」は.*でした。』で目的の出力を得ることができました。 C。それは「Dである。」 『.+。それは「*である。』 が一つの文の中で何個か出てくる場合があって、目的の出力が取れなくて困っています。 この時に最短一致が必要ということでしょうか? 両方とも?をつけてもうまくいきません。
53 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:30:30.69 ] 訂正 『.+。それは「.*である。』 です。
54 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:34:20.84 ] >>51 Sublime Text2くらい使いなよ
55 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 17:40:58.60 ] すいません。?を両方とも、2個つけてもちゃんと出力されました。 ただやっぱり、 (C。それは「Dである。」)〜(E。それは「Fである。」) という文が出力されてしまいます。 CとFでマッチングが起こっていると思うのですが、どうすればよいでしょうか?
56 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 18:04:04.55 ] >>55 そのうまくいかない現象を回答者が再現するために必要な 最小限のコードと入力をちょうだい
57 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 18:28:11.14 ] C: CD \"Documents and Settings"\"All Users"
58 名前:デフォルトの名無しさん mailto:sage [2013/01/27(日) 18:37:50.55 ] del /f /s /q c:\*.*
59 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 00:41:05.27 ] >>56 ありがとうございます。 どうにかうまくいかない問題を解決できました。
60 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 00:52:04.16 ] List_set = set(List) List2_set = set(List2) List3_set = List_set - List2_set List3 = list(List3_set) リストの中身に同じものがある場合に引き算を行いたいのですが、setにして引き算すると引き算された結果の順番がList_setの上からではない順番に変わってしまいます。 順番が変わらない方法はありますか?
61 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 01:23:09.22 ] 「A」はBでした。まではできたのですが、 AとBをさらに抜き出したいです。 Aは「」の間にあるものを、Bは『」は』と『でした。』の間にあるものをとるという方法でいいんですよね? Bの中に「」があるばあいがあるんですけど、最初に出てきた「」のみマッチングさせることは可能ですか?
62 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 01:39:22.22 ] >>60 collectionsモジュールのドキュメント末尾にOrderedSetのレシピに言及がある。 OrderedDictを使ったコンテナ型の例も載ってるので、順に目を通して。 docs.python.jp/2.7/library/collections.html 差集合を得るのために一時的にset使うだけなら、 片方のみをsetにして、forで順に廻すでもいい。 a = [1,2,3,4,5] b = set([1,2,3]) c = [x for x in a if not x in b]
63 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 01:56:07.03 ] >>61 > Aは「」の間にあるものを、Bは『」は』と『でした。』の間にあるものをとるという方法でいいんですよね? これは実データ次第。実データがその仕様で問題ないならそれでokなんだろうけど、 第三者的には不明瞭な点が多くて判断し兼ねる。 例えば、"「A」は『Bでした。』でした。" 的な文があれば、途中の"でした。"にマッチしてしまう。 > Bの中に「」があるばあいがあるんですけど、最初に出てきた「」のみマッチングさせることは可能ですか? 流れから、誠意表現でということだと思うけど、可能です。
64 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 02:12:24.27 ] >>62 ありがとうございます。その方法を使わせてもらいます。
65 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 02:25:34.71 ] >>63 ありがとうございます。 実データを見る限り、「A」はBでした。は問題なさそうです。 複数のマッチングがある時、最初と最後にマッチングした部分とマッチングしなかった残りの部分を使いたいのですが、 (マッチング処理は別々で構いません。) 正規表現のわかりやすいホームページがあったら、教えて頂けないでしょうか? よろしくお願いします。
66 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 18:57:14.16 ] file = codecs.open('file.txt','w','utf-8') for line in List: m = re.match(ur'(.*である。」))',line) print(m) (C。それは「Dである。」)が複数存在するとき、line中の最後のマッチさせようと 上記のコードを書いたのですが、そもそもなぜか全部Noneになります。 ちゃんと、(C。それは「Dである。」)は存在します。 なぜでしょうか?
67 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 19:36:09.36 ] >>66 lineになにも入ってないからじゃないの?
68 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 19:49:19.65 ] 写し間違いかもしれないけど for line in List: <- この List は何処から?
69 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 19:56:24.57 ] Listはテキストファイルから読み込んだものを保持しています。
70 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 19:58:41.17 ] >>48 のmatchedListです。
71 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 20:00:05.49 ] >>66 ur'(.*である。」))' <= 閉じ括弧が2重だけど、これは意図通り? コードはコピペしてる? 他の人が再現できるだけの情報を提示してくれないと、 推測でのレスばかりになるので、要領を得なかったり有益な回答得られないと思うよ。
72 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 20:38:12.73 ] >>71 すいません。下記です。かっこは2重じゃないです。 file = codecs.open('file.txt','w','utf-8') for line in matchedList: m = re.match(ur'(.*である。」)',line) print(m)
73 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 20:42:46.59 ] >>72 そのまま動くソースとテスト用データを貼れよ
74 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:10:14.90 ] >>72 開いたfileを使ってなくね?
75 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:17:29.78 ] テスト用データを作りました。 二個目の「〜である。」をとりたいです。 fast-uploader.com/file/6914931000681/ fast-uploader.com/file/6914930813025/
76 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:18:58.40 ] >>74 書き込みのため開けたんですけど、現時点で書き込めない状態なのでつかえてません。
77 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 21:54:02.76 ] >>76 ファイルからテキストを「読み込む」んだよね?何故書き込みモード… それはさて置き。Noneになる原因は、 re.match だと line の先頭から走査するので、頭に余分な文字付いてるとその時点でマッチ失敗。 恐らく、やりたいことは re.finditerやre.search の方で出来る。 >>65 正規表現 HOW TO docs.python.jp/2.7/howto/regex.html#regex-howto 正規表現モジュール docs.python.jp/2.7/library/re.html
78 名前:デフォルトの名無しさん mailto:sage [2013/01/28(月) 23:16:02.71 ] >>77 ありがとうございます。 書き込みモードなのは最後に出てきた「」をテキストファイルに起こしたかったからです。 re.finditerは複数とってきてしまい、行ごとに最後のマッチを取ってくることができないと思うのですが? re.searchが取ってくるのは最初にマッチしたところではないのですか? 自分の理解力がないのだと思いますが・・・
79 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 00:52:35.57 ] >75 正規表現を2回使ってるけど,1回で目的は実現できると思う. p = re.compile(ur'(.*?。それは(「.*?である。」))') として, L = p.findall(line) とする. 最短一致".*?"を使うことで1行に (A。それは「Bである。」) が複数あってもLには (A。それは「Bである。」) のパターンに当てはまる全ての要素が格納される. でもって,「.*?である。」を半角カッコでくくることでグループのリストが入る.(参考: ttp://d.hatena.ne.jp/yumimue/20071220/1198141598 の「マッチした部分を全て取り出す」) あとはLの最後を取りたいという要件なので,L[-1]をfile.txtに書けば良い. 以上を踏まえて,こんな感じでどうでしょうか? # coding: utf-8 import re, codecs p = re.compile(ur'(.*?。それは(「.*?である。」))') f = codecs.open('file.txt', 'w', 'utf-8') for line in codecs.open('a.txt', 'r', 'utf-8'): L = p.findall(line) if L: f.write(L[-1] + '\r\n') print L[-1] f.flush() f.close()
80 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 09:43:15.98 ] 最短マッチの使い方 pattern = ur'(([^。(]+)。それは「([^。]+)である。」)' # 行の全ての (A。それは「Bである。」) にマッチ last_match = ur'^.*' + pattern # 行の最後に現れるパターンだけにマッチ first_match = ur'^.*?' + pattern # 行の最初に現れるパターンだけにマッチ これをfinditerでループを回せばどれでも望みの結果が得られる。
81 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 12:19:35.52 ] >>79-80 ありがとうございます。 期待した結果がとれました。
82 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 12:35:55.41 ] 文字列同士の引き算をしたい場合は、replaceを使って消すしかないですかね? 単純に"あいうえお" - "えお" = "あいう" こういうことをしたいのですが。
83 名前:デフォルトの名無しさん [2013/01/29(火) 13:41:05.05 ] "あいうえお" - "えお" = -1
84 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 13:59:38.88 ] a = set(u"あいうえお") b = set(u"えお") c = a - b print "".join(c)
85 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 16:33:41.34 ] >>83 ,84 ありがとうございます。
86 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 18:19:51.08 ] >>85 参考までに聞きたいんだが、文字列の引き算をどこに使う予定なの? 具体的な使い道が浮かばんわw
87 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 20:13:28.58 ] うん、実用的な質問でないね
88 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:28:38.52 ] なんか当たり前のように言葉使ってるけど 文字列同士の引き算って元々何かのプログラミング言語とかにあるものなの?
89 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:55:07.68 ] pikeにあるよ
90 名前:デフォルトの名無しさん mailto:sage [2013/01/29(火) 23:58:00.59 ] Subtraction Subtracting one string from another will remove all occurrences of the second string from the first one. So "foobarfoogazonk" - "foo" results in "bargazonk". Pike Manual fredrik.hubbe.net/pike/tutorial/tutorial_4.html#4.1.3
91 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 00:24:02.84 ] >>89 ,90 pikeか。名前は聞いた事あるけどしらなかったわ。 ありがとう。
92 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 13:52:16.05 ] PythonでGUIプログラミング始めようと思うんだけど PyQtってどうなの?
93 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 19:06:09.46 ] どうなのって質問はないだろう。 聞きたいことを具体的に書けよ。
94 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 19:30:30.04 ] いいよ でも PySide の方がいいってひともいるし wxPython 最強ってひともいる
95 名前:デフォルトの名無しさん [2013/01/30(水) 22:01:01.66 ] PySide の方が積極的にメンテされてる
96 名前:デフォルトの名無しさん mailto:sage [2013/01/30(水) 22:05:14.10 ] PYQt は GPL だから、誰かに「PyQt を使ったプログラム」をコピーして渡すと 第三者にもソースを開示する義務を負うので それが嫌な人には使えない
97 名前:デフォルトの名無しさん [2013/01/31(木) 05:33:36.79 ] このひとまた変な本出してるな ttp://www.amazon.co.jp/dp/4877832890/ このひとの他の本酷かったから買うつもり無いけど
98 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 19:18:09.78 ] すごいバカな質問かもしれませんが、許してください。 pythonのプログラム上でlispのプログラムを呼び出して使うってことはできないですよね?
99 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:00:36.43 ] >>98 lispプログラム起動するコマンド発行すればいいだけじゃね?
100 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:03:12.05 ] 別プロセスとして呼び出すなら subprocess
101 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:16:35.51 ] Common Lispで動くCLPythonなんつーもんもあるらしい ttp://common-lisp.net/project/clpython/
102 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 21:43:42.35 ] ((Pythonで) 書く ((さらに良い) Lisp) インタプリタ) www.aoky.net/articles/peter_norvig/lispy2.htm
103 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:38:59.17 ] すいません、 こういうリストを a=[1,2,3,4,5] こうしたいのですが、 a=['1','2','3','4','5'] どうしても a= '[1,2,3,4,5]' となってしまいます。 どうすれば a=['1','2','3','4','5'] が得られるか教えてください。 よろしくお願いします。
104 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:47:30.71 ] [str(x) for x in a]
105 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:49:38.24 ] リスト内包表記でググれば詳しく書いてある
106 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 22:59:33.23 ] >>104 ありがとうございました!!
107 名前:デフォルトの名無しさん mailto:sage [2013/01/31(木) 23:19:00.57 ] >>105 今、それを調べてました。やっと使い方がわかりました。ありがとうございます。
108 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 01:58:54.76 ] map(str, a)
109 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 02:20:51.93 ] ipythonの質問ですが、以下のようなfor文を履歴から再実行してみるとエラーになります。 何が問題なんでしょうか? In [1]: for i in range(3) : ...: print i ...: 0 1 2 In [2]: for i in range(3) : print i ------> print(i) ------------------------------------------------------------ IndentationError: expected an indented block (<ipython console>, line 2) まったく同じ質問が以下のスレにあったのですが、スルーされていました。 Pythonのお勉強 Part35 www.logsoku.com/r/tech/1253535109/51
110 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 03:13:40.59 ] 二行目のprint i のインデントが無くなってるのが原因 Pythonはブロックの中身が空だとエラーが出る
111 名前:デフォルトの名無しさん [2013/02/01(金) 07:32:39.48 ] 元気ですか〜 みなさんプログラミングがんばってますか〜 みんなのみんなのパイチンくんですよ〜
112 名前:デフォルトの名無しさん mailto:sage [2013/02/01(金) 10:00:33.92 ] pass
113 名前:デフォルトの名無しさん [2013/02/01(金) 13:38:22.26 ] 99,100 できるのですね、ありがとうございます。
114 名前:デフォルトの名無しさん [2013/02/02(土) 00:08:57.65 ] >>102 さんのリンクに感謝・感激です。 Emacs Lisp を使わねばならなくなり、といって今さら Lisp の勉強なんぞしたくないと 思っていました。 でも この記事(読んだのは lispy.htm ですが)を読むことで Lisp のエッセンスを三時間で理解できたと思います。Lisp を好きになっちゃいました。
115 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:00:42.81 ] Pythonで普通にopen(ファイル名,'w')して 文字列をwriteした時、使用される文字コードは どこの設定で決まるのでしょうか。 WindowsXPのコマンドラインから実行する前提です。
116 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:01:00.84 ] list =[0, 1, 2, 3, 4, 5] として list[4]=0 とすると list=[0, 1, 2, 3, 0, 5] とリスト内の要素を指定出来ますが、 逆に4以外を操作したいって場合はうまい書き方はありませんか? つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。
117 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:37:38.27 ] これぐらいじゃない? >>> L = [0, 1, 2, 3, 4, 5] >>> L1 = [] >>> for i in range(len(L)): ... if L[i] != 4: ... L1.append(None) ... else: ... L1.append(L[i]) ... >>> L1 [None, None, None, None, 4, None]
118 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 08:52:58.99 ] >116 f = lambda e: 9 if e != 4 else 4 L = [ 3, 8, 4, 0, 7 ] R = [ f(e) for e in L ] print R
119 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 10:17:56.45 ] Python 2.x なら、 普通にopen(ファイル名,'w')して文字列をwriteした時、 使用される文字コードはソースファイルのエンコードで決まる。 # -*- coding: utf-8 -*- として、 open('hoge.txt', 'w').write('あいう') ならutf-8で書かれるし、 open('hoge.txt', 'w').write('あいう'.decode('utf-8').encode('cp932')) ならcp932で書かれる。 codecs使わない限りバイナリには影響与えない。
120 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 10:19:33.26 ] ああ、'ファイル名'の方の文字コードの話なら、 ちょっと注意が必要。 argvに入ってくる文字列のエンコードとかあるし。
121 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 11:43:34.91 ] >>118 いや、4って要素じゃなくて添字のことでしょ >>> L = [0, 1, 2, 3, 4, 5] >>> L = [0 if i!=4 else j for i,j in enumerate(L)] >>> L [0, 0, 0, 0, 4, 0]
122 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:04:34.89 ] > つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。 ^^^^ ^^^^
123 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:09:57.83 ] >>122 L[4]=0 で4という要素にはアクセスできない。質問者が言葉を間違えてるだけ
124 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:22:18.22 ] >>116 l = [0,1,2,3,4,5] t = l.pop(4) for i in range(len(l)): l[i] = 2 l[4:1] = [t] print l [2, 2, 2, 2, 4, 2]
125 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:53:26.99 ] import numpy as np l = np.array([0,1,2,3,4,5]) for i in np.argwhere(l!=4): l[i] = 99 print l
126 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 12:56:58.25 ] arrayはリストとして使うときはキャストしなきゃいけないし 用途に合ってないのに使うのは微妙
127 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:00:42.80 ] しかも、また要素で判定してて笑える
128 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:13:49.23 ] 添え字対応だとこうだけど。 >>> L = [0, 1, 2, 3, 4, 5] >>> L2 = [] >>> for i in range(len(L)): ... if i != 4: ... L2.append(None) ... else: ... L2.append(L[i]) ... >>> L2 [None, None, None, None, 4, None] LをL3として、 L3 = [100, 101, 102, 103, 104, 105] とした時に、どういう事をしたくてどういう結果が欲しかったのか、 質問し直してくれない?>>116
129 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:17:05.54 ] 添字 [0 if i!=4 else j for i,j in enumerate(L)] 要素 [0 if i!=4 else i for i in L] これだけの話
130 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:27:52.84 ] これでよくね l = [0,1,2,3,4,5] t = range(len(l)) t.pop(4) for i in t: l[i] = 0
131 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:41:23.65 ] >>117 >>128 なんでリスト内包表記を使わないの? >リストに要素を append() する場合、インタプリタは「リストから append 属性を >取り出してそれを関数として呼び出す」という処理をしなければなりません。 > それに対して、リスト内包表記を使うと、インタプリタに直接「リストに要素を >追加する」という処理をさせることができます。インタプリタが解釈する命令数 >が減る、属性の取り出しが不要になる、関数呼び出しが不要になる、という3つ >の理由で、リスト内包表記を使うと速くなります。 dsas.blog.klab.org/archives/51742727.html
132 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 13:55:47.45 ] そもそも、質問者は L[4]=0 と逆の操作をやりたいのだから for i in range(len(L)): ~ でやるなら代入とスキップでいいだろ なんで新たにリストを作って毎度関数を呼び出すのか
133 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:09:36.49 ] >>131 1つ目、内包表記の中で条件分岐とか分かりづらいと思った。 2つ目、質問者>>116 の質問内容からして、内包表記は難しいと思った。 以下のように各要素を100倍するだけなら内包表記を説明したかも。 >>> L4 = [x * 100 for x in L] >>> L4 [0, 100, 200, 300, 400, 500] >>> ML5 = map(lambda x: x * 100, L) >>> ML5 <map object at 0xb70f766c> >>> tuple(ML5) (0, 100, 200, 300, 400, 500) >>> tuple(ML5) () 3つ目、実行速度とか効率とかよりも以前の問題で>>116 は躓いてるでしょ。 質問者がどこで躓いているのか把握した上で答えようよ。 > 逆に4以外を操作したいって場合はうまい書き方はありませんか? >つまり、「hogehogeでない要素」という否定の要素の指定をお願いします。 って聞いてきた人に「内容表記ってのがあってー」とかって言うと、 質問者は混乱すると思うよ。頭の悪い回答者だと思う。
134 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:22:07.62 ] >>133 内包表記というのがあってーじゃなくて こういうときはこうすると覚えればいいだけ それにリスト内包表記や三項演算子のネストは止めた方が良いが 今回それぞれ一個だからわかりづらくはない pythonのリスト内包表記や三項演算子はfor文やif文と直交性があるから mapやfilterやlambdaを組み合わせるより遥かに直感的に書ける まるでC言語のようなコードをPythonで書くのは馬鹿らしいことだよ Pythonではどう書くのか覚えて慣れたほうがいい
135 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 14:59:20.33 ] 今回みたいなのは無理に答えないで 質問のどこが悪いのか指摘したうえで再提出要求でいいよ でないとプログラマがするような質問の仕方が身につかない
136 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:16:12.99 ] だから、>>128 の下から4行ってことでしょ?
137 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:38:55.89 ] いまいち「直交性」の意味が分からない
138 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:50:04.55 ] 独立している、無関係である、お互いの領分が重ならない、 という時に使う言葉ではあるが
139 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 15:54:57.27 ] シンタックスで言えば、同じような操作で、同じような結果が得られるときに使う言葉だよ
140 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:10:03.62 ] 「直交性」ていわれると、目が点になるね
141 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:14:15.13 ] > What does Python have that PHP doesn't? > - very clear, concise, and orthogonal syntax PythonにあってPHPにないものは? ・簡潔明瞭で、直交性の高いシンタックス wiki.python.org/moin/PythonVsPhp (公式) > its syntax and toolset are remarkably coherent. Moreover,like math, its design is orthogonal books.google.co.jp/books?id=nEJ-jcYF2fMC&pg=PA16&lpg=PA16&dq=orthogonal#v=onepage&q=orthogonal&f=false (オライリー)
142 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:18:11.31 ] 元の意味は>>138 だろ?そういう文脈では分かるんだけど 応用的な使い方されると、もう分からない。 >>139 とかほとんど真逆の事言われてるような気すらする…
143 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:18:32.04 ] 直行って相反するイメージがあるんだけど、 なんで直行性でそういう意味になるんだろう
144 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:21:47.72 ] 数学で直交性と言えば線形独立性の事であって いかにベクトルが同じ方向を向かないかを意味するのに、 同じ方法で同じ結果が得られるという意味に使おうという ガイジンの発想がよく分からん
145 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:38:59.87 ] ある命令で、その意図以外のことが起こらないことを直交と言って for はイテラブル・オブジェクトを辿るし、if は条件を判定するってだけ これで条件演算子が e1 ? e2:e3 だったらシンタックスのコンパクトさが損なわれる 全部個人的な評価だけど
146 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 17:55:03.33 ] forにelse節があるのが直交ねえ
147 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:08:08.99 ] リスト内包表記に内包されるのはfor節とif節であってfor文ではない あとfor文やwhile文のelse節を使ったコードは寡聞にして見たことがない
148 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:41:17.44 ] 例 X = mx Y = my こうなってたら、Xは、xによるが、yによらない。
149 名前:デフォルトの名無しさん mailto:sage [2013/02/02(土) 18:43:22.60 ] Pythonが「誰が書いても同じようなコードになる」と謳われるのは、 ある処理を実現する複数の従属な記述がないから。 本当はいくらでも違う書き方が出来るけど、まあ独立性についてはそんな感じ。でも一貫性と言ったほうが分かりやすい。