http://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 > のようなエラーが出ます > これはどのようにすればいいのでしょうか?
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を切り替える以外に方法ありますでしょうか? 0007デフォルトの名無しさん2017/05/30(火) 10:49:29.89ID:gxWnkgCC おまえ向いてない 0008デフォルトの名無しさん2017/05/30(火) 10:59:08.01ID:ItunGfv1>>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)) 0009デフォルトの名無しさん2017/05/30(火) 11:14:07.76ID:C9qHY4kc>>7 最終的な目的がわからんのだが、他の方法でやりたい理由は? 単にスマートに書きたいってだけ? 0010デフォルトの名無しさん2017/05/30(火) 11:14:43.87ID:C9qHY4kc アンカ違ってた。>>6ね。 0011デフォルトの名無しさん2017/05/30(火) 11:46:52.81ID:ItunGfv1>>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') 0012デフォルトの名無しさん2017/05/30(火) 14:23:14.01ID:6yum6/wf>>8,11 ありがとうございます。 参考にさせていただきます。
最初に内包表記で作ったのが 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] 0013デフォルトの名無しさん2017/05/30(火) 14:30:48.01ID:6yum6/wf リストにしなくてもこれでいけそう
flag = True test = 'あいうえお' + ('かきくけこ' if flag else '') + 'さしすせそ' print(test)
どうもありがとうございました。 0014デフォルトの名無しさん2017/05/30(火) 15:33:34.98ID:C9qHY4kc そこにこそformat()だろ。 test ='あいうえお{}さしすせそ' .format('かきくけこ' if flag else '') 0015デフォルトの名無しさん2017/05/30(火) 17:10:33.37ID:6yum6/wf>>14 ありがとう 確かにこっちのほうがきれいだ 0016デフォルトの名無しさん2017/05/30(火) 17:27:38.44ID:8uTEYK+9 きれいだ 0017age2017/05/30(火) 18:54:13.25ID:cPI0fzDZ 実行完了後に端末を閉じたい exit()で終了すると思ったのですが終了しませんでした。
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: 0032デフォルトの名無しさん2017/05/30(火) 23:30:27.91ID:kWERrntF>>31 俺ならitertools使う 0033デフォルトの名無しさん2017/05/30(火) 23:34:04.54ID:/DgUh2Dj>>31 やってみりゃいいじゃん 0034デフォルトの名無しさん2017/05/30(火) 23:36:14.34ID:f/2fyGyA>>32
内側の for 文の in の後の集合は毎回評価されるのかと思っていました。 0040デフォルトの名無しさん2017/05/31(水) 00:21:53.01ID:eDo7CzNQ あ、でもやっぱり B は毎回評価されるような気がします。 例えば、↓のようなコードを考えると B は毎回評価されないとダメな気がします。
for i in A: →ここで B を変更する ■■for j in B: 0041デフォルトの名無しさん2017/05/31(水) 00:42:01.43ID:yq0731FK 超初心者はパフォーマンスなんか気にするなよ 0042デフォルトの名無しさん2017/05/31(水) 01:50:21.04ID:jDvWEkkq 何十万回もループを回すような場合だと、ローカル変数への割当は、数十ミリから数百ミリ秒の高速化になった記憶がある。
あと、ネストしたリストへのアクセスは遅いので、 a[m][n]に二重ループでアクセスする時は、 am=a[m] と1つめのループの中でしておいてから、 二つ目のループの中では、 am[n]としてアクセスした方が、速くなる。 これは、ループが1000回くらいでも、ミリ秒単位でちゃんと差が出る。 もちろん、index使ってのアクセスよりも、 for elem in lst: としてイテレータ使う方が速い。
普通サーバーなどは、デーモン化して、親プロセスをなくす。 そうすれば、親が終了しても、無関係だから安全 0046デフォルトの名無しさん2017/05/31(水) 13:02:32.85ID:8pr90v8J for a in [1,2,3,4,5]: [tab]print(a) ←インデントする print("こんにちわ") ←インデントしない
(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]) 0088デフォルトの名無しさん2017/05/31(水) 22:25:48.52ID:6C3HqcgA 六本木 ネットベンチャー系 2017年春の陣 http://file.takanoridayo.blog.shinobi.jp/dayo170301roppongi.png0089デフォルトの名無しさん2017/05/31(水) 22:38:26.58ID:u7MalF/7 最後のelse文で i > j で無い。から 0090デフォルトの名無しさん2017/05/31(水) 22:39:42.54ID:Qo+ozR8I ループ変数の値をループ内で変更するとまずいとかそういうことはありますか? 0091デフォルトの名無しさん2017/05/31(水) 22:48:01.11ID:Qo+ozR8I もっと問題をシンプルにしてみましたが、やはり理解できない現象が 発生します。
なぜか(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)) 0092デフォルトの名無しさん2017/05/31(水) 22:49:02.56ID:Qo+ozR8I (1)の結果: