◎正当な理由による書き込みの削除について: 生島英之 とみられる方へ:【まず1嫁】くだすれPython(超初心者用) その57 YouTube動画>3本 ->画像>9枚
動画、画像抽出 ||
この掲示板へ
類似スレ
掲示板一覧 人気スレ 動画人気順
このスレへの固定リンク: http://5chb.net/r/tech/1653225908/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。
当スレに★Python以外のプログラミング言語での回答類を書くべからず★ 派生言語はそれぞれ専スレがある(この板にあるとは限らない)ので、そっち池。 「Ruby」「Rails」「某言語では」「クソチョンw」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。 このスレッドは「お勉強」スレのほうには書き込めない超低レベル、 もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。 へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。 ★エラーを解決したい場合★は、 表示されたエラーの全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、 実行環境(Pythonのバージョン・OSとIDEの種類およびバージョン)をシッカリ書くこと。 Pythonの★ソースコードをそのまま5ちゃんに貼るとインデントが崩れてチヌ★ 【【【複数の連続半角スペースはなにもなかったことにされる&タブは普通には入れられない】】】掲示板の仕様なので、 プログラム文は↓等の、いわゆるコードうp用サイトに貼ってこいください。 https://techiedelight.com/compiler/ Run Code機能あり。 http://ideone.com/ デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。 http://codepad.org/ ほぼ直感的に使える。Run codeボタンあり。 http://pastebin.com/ まずまずシンプル。 http://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 ◇Python公式◇ http://www.python.org/ ◇まとめwiki◇ http://python.rdy.jp/wiki.cgi 〇前スレ〇 【まず1嫁】くだすれPython(超初心者用) その56 http://2chb.net/r/tech/1640536690/ 次スレたては >>985 あたりが挑戦する。 ### END OF TEMPLATE ### かわいい女の子に上目遣いで拗ねたように「いじわる」と言われると興奮するんです
pandasについての質問です。 "PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)"の順にデータが入ってるとします。 下記みたいな感じです。 @[0,0,2470,0,0,27] ○ A[0,0,1570,0,0,0] ☓ B[0,1580,1440,0,35,31] ○ C[0,1290,2878,0,0,31] ☓ D[2522,885,940,31,0,0] ☓ E[1527,1057,1639,28,5,31] ☓ F[1527,1457,1639,28,26,31] ○ ○をつけたデータが残したいデータになります。 @AのようにPRICE>0のPRICEデータが1つの場合は、該当するP(%)データが25より大きい場合に残したいです。 BCのようにPRICE>0のPRICEデータが2つの場合は、該当するP(%)データがどちらも20より大きい場合に残したいです。 DEFのようにPRICE>0のPRICEデータが3つの場合は、該当するP(%)データがどちらも15より大きい場合に残したいです。 調べたら下記のような感じでやっていくことがわかったのですが、思うように整理できません。 df = pd.read_sql(sql=f'SELECT "PRICE1","PRICE2","PRICE3","P1(%)","P2(%)","P3(%)" FROM {schema}."{get_table}";', con=conn) df = df[(df["PRICE1"]>0) | (df["PRICE2"]>0) | (df["PRICE3"]>0) | (df["P1(%)"]>25) | (df["P1(%)"]>25) | (df["P1(%)"]>25)] df = [tuple(x) for x in df.values] 誰か助けてくだしあ
よーしらんが、論理回路の問題なんだろ? なら一時的にif(if(if))みたいなネストの深いクソコード書いて、細かくデバック通すか 関数宣言をさぼらずに、(df["PRICE1"]>0)や(df["P1(%)"]>25)に分かりやすい関数名付けたほうがいいんじゃねえかな
datetime.datetimeクラスの順序比較に手を加えたくなって、モジュールのソースをみたら_cmp()メソッドが比較の本体だったので
https://techiedelight.com/compiler/?zbRJ というコードで試したのですが、そもそも_cmp()が呼ばれません
これって、私は何を間違えているのでしょう? (なお、当初やりたかったこと自体は__eq__, __gt__, __ge__, __le__, __lt__, __ne__を直接オーバーライドすることで達成できました)
条件に合うものを残すより 条件に合わないものを消していく方が効率が良い
>>8 お返事ありがとうございます
しかし、_cmpのアンダースコアは一つですし、AttributeErrorが発生したりせず単に呼ばれないだけ(比較自体は出来ているので親クラスの_cmp()が呼ばれているはず)です
マングル化に関するページをご紹介いただいた意味がよく分かりません
def もれそう(arg1, arg2, arg3, arg4, arg5, arg6):
__うんこ = [arg1, arg2, arg3]
__おもさ = [arg4, arg5, arg6]
__def 内容量(element):
____return len(list(filter(lambda x: x > 0, element)))
__def 耐久力(element, n):
____return list(filter(lambda x: x > n, element))
__if 内容量(うんこ) == 1:
____return 耐久力(おもさ, 25)
__elif 内容量(うんこ) == 2:
____return 耐久力(おもさ, 20)
__elif 内容量(うんこ) == 3:
____return 耐久力(おもさ, 15)
df = もれそう(茶色1,茶色2,茶色3,重量1, 重量2, 重量3)
pandasのことよー知らんから
>>5 で適当なこと書いちゃったけど、こういうことだよな
どっかで関数一覧に目を通すなりして、array関数とかcallback関数の使い方覚えたほうがいいぞ
>>4 sqlでの抽出は知らんけど、他の方法で抽出でけた import pandas as pd data=[ [0,0,2470,0,0,27], [0,0,1570,0,0,0], [0,1580,1440,0,35,31], [0,1290,2878,0,0,31], [2522,885,940,31,0,0], [1527,1057,1639,28,5,31], [1527,1457,1639,28,26,31]] df = pd.DataFrame(data) def check(row): d = {1:25, 2:20, 3:15} return all(i[1] > d[len(row)] for i in row) # 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック [check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]] [True, False, True, False, False, False, True] # ブールインデックス作成 df2 = df[_] # ブールインデックスで抽出 df2.values.tolist() [[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]] プロンプトが無くて入力と出力が分かりにくかったので、プロンプト追加 >>>import pandas as pd >>>data=[ ・・・ [0,0,2470,0,0,27], ・・・ [0,0,1570,0,0,0], ・・・ [0,1580,1440,0,35,31], ・・・ [0,1290,2878,0,0,31], ・・・ [2522,885,940,31,0,0], ・・・ [1527,1057,1639,28,5,31], ・・・ [1527,1457,1639,28,26,31]] >>>df = pd.DataFrame(data) >>>def check(row): ・・・ d = {1:25, 2:20, 3:15} ・・・ return all(i[1] > d[len(row)] for i in row) # 各PRICEと各P(%)の組をzipで作って、その中からPRICEがゼロのものを削除したものをcheck関数でチェック >>>[check([k for k in j if k[0]>0]) for j in [list(zip(i[:3], i[3:])) for i in df.values.tolist()]] [True, False, True, False, False, False, True] # ブールインデックス作成 >>>df2 = df[_] # ブールインデックスで抽出 >>>df2.values.tolist() [[0, 0, 2470, 0, 0, 27], [0, 1580, 1440, 0, 35, 31], [1527, 1457, 1639, 28, 26, 31]]
>>5 >>10
>>11 ありがとうございます!
家帰ったら内容目通していじってみます
>>12 正直かなり助かりました。
まだ家帰れてないので試せてないけど、かなり行けそうなイメージです
>>9 >親クラスの_cmp()が呼ばれているはず
確かめた?
>>15 お返事ありがとうございます。親クラスのメソッドが呼び出されていることを実際にどう確認すればいいのか思いつけないレベルです(デバッガ? トレース?)
ただ単に、例外が送出されずに比較結果が表示されたので、何らかの比較するメソッドが呼ばれたのだろうと想像しただけです
例えば、foo <= datetime.datetime.max が評価されるとき
1) foo.__le__(datetime.datetime.max) が呼ばれる
2) fooには__le__メソッドが定義されていないので親クラスに遡って datetime.datetime.__le__(self=foo, other=datetime.datetime.max) が呼ばれる
3)
https://github.com/python/cpython/blob/main/Lib/datetime.py の2110行 self._cmp(other) へ進む
ここでself=foo, other=datetime.datetime.max なので、 foo._cmp(other=datetime.datetime.max) と、
https://techiedelight.com/compiler/?zbRJ の4行目で定義したメソッドが呼ばれる
と考えていたのですが……継承に関する理解がどっかで間違っているのでしょうね
foo を造ってるのが now() なので foo の型が datetime のままなんじゃね
print(super(DatetimeTest, self)._cmp) ↓ AttributeError: 'super' object has no attribute '_cmp'
>>12 allの引数が空の場合(全てのPRICEがゼロの場合)にTrueを返すのでcheck関数修正 def check(row): d = {1:25, 2:20, 3:15} return all(i[1] > d[len(row)] for i in row) if row else False ジェネレーター式まで学習が進んだが ちゃんと慣れないと突然でてきたとき「なんだこれ!?」ってなるとおもうわ 見やすくするためのものだからそんな複雑な構造で出てくることはないと思うが
ID:NPpCVuaPさん、ありがとうございます
> foo を造ってるのが now() なので
> foo の型が datetime のままなんじゃね
type(foo)はちゃんと"<class '__main__.DatetimeTest'>"になっていましたので、その線は無さそうです
で、試していただいた
https://techiedelight.com/compiler/?Jmnq ですと、
>>16 で私が考えたとおりの動作をしているように見えますね
となると、datetime.datetimeとHogeで何が違うのか……ちょっと脳味噌が煮えてきたので、一旦専ブラを閉じて頭を冷やします
>>23 dirで_cmpが見えるか見えないかの違いじゃないでしょうか
>>20 のdir(Hoge(0)), dir(Fuga(0))は伴に_cmpが見えますが
dir(datetime.datetime.now())は_cmpが表示されないのでアクセスできないんですよ
見えないのはわかったけどその挙動を実現するための言語仕様ってあるんだっけ?
やりましたみなさん、分かりました!
datetime.pyの最後のにfrom _datetime import *をtryする記述があり
成功したら_cmpなどを消す処理が書いてあるんですが、この_datetimeをimportする関連個所を
ごっそりコメントアウトして
import datetime
dir(datetime.datetime.now())
したら_cmpが表示されましたよ、つまりdatetimeの本体は_datetimeで
>>26 のヤツじゃないでしょうか
>>24 お返事ありがとうございます
呼べないのはDatetimeTest._cmp()であってdatetime.datetime._cmp()は呼べている(ように見える)わけですから
datetime.datetime._cmpが見えないことに意味があるのかどうか……一晩経っても脳が煮えたままです
ちなみにdir(foo)だと_cmpが見えてますね……
>>26-28 とりあえず知識もスキルもないなりに手を動かそうと思って、
https://techiedelight.com/compiler/?zbRJ のimport datetimeの位置に
datetimeモジュールのソースをそのまま全部貼り付けてあれこれ試したところ(そのコードはでかいしTECHIE DELIGHTの利用規約的にクリアかどうか分からないのでアップしません)
https://github.com/python/cpython/blob/main/Lib/datetime.py の最後、2614行目以降が無ければ
>>16 で私が考えたとおりの動作になる、つまりfoo._cmp()が呼ばれますが、2614行目以降がそのままだと呼ばれませんでした
ということで、遅ればせながら
>>28 さんと同じ結果に辿り着けました
Cで書かれたモジュールを読み込んで、未使用の名前を削除して、という工程の中になにかありそう、というあたりが今のところ私の限界です
皆さまいろいろとありがとうございます
やはり
>>27 さんのおっしゃるとおり、まず
>>15 さんの指摘を確かめなければならなかったようですね
>>28 まじか
グローバルにも_cmpがあるからそれを消すためのコードと思いきや、datetime.datetime._cmpも消えるのね…
>>29 そこで削除されてる _cmp は module のグローバルの _cmp であって
各クラス内の _cmp は削除されてないようにも観える
>>32 グローバルの_cmpを消す処理で合ってると思いますよ
通常は _datetime (たぶん本体がC言語)をimportする、この中にはself._cmpが無いのでdirで見えないし
グローバルの_cmpを消す処理でグローバルの方も見えない
_datetimeのimportに失敗したらdatetime.pyに書かれているdatetimeクラスが使われるし
グローバルの_cmpを消す処理が実行されないので
dir(datetime)でグローバルの_cmpが見えるし、dir(datetime.datetime)でself._cmpが見える
python 2.x 系の環境です。 file_path を関連付けで実行させるために下記コードを記述しました。 目的としては引数の文字列を unicode として渡したいです。 subprocess.Popen(「'start', file_path], shell=True) この際、引数は cp932 として扱われるようで、 file_path を cp932 にencode しないと失敗します。 unicode にしかない文字が含まれる場合があるので unicode のまま渡したいのですが Popen 側で引数を unicode として受け取れる方法はありますか? encoding= は Python 2.x は未対応、 またパイプを使って chcp 65001 を先に実行させてもダメでした。
win環境なのですが2.x系では内部で ANSI版のCreateProcessAを呼び出しているとのことで そもそもダメということが分かりました ctypesなど使ってCreateProcessWを直接呼び出すなどするしかないみたいです
今のWindowsおすすめpython環境はなんですか? 教育用?にWindowsでのpython環境を作りたいです。 無印python、anaconda、PyCharmはどれがいいでしょうか。 エディタはVSCodeの利用を考えてます。 自分は普段、LinuxやWSL2でemacsを使っているオールドタイプです。 教えて下さい
たとえば以下のようなリストが即興で欲しくなった場合ってどうしてます? [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11]…………] (下の例では0~12まで) ググった結果numpyで配列を作ってtolistでリスト化する方法は見つけたんですけど もっとぱっと書けないですかね? import as numpy np arr_2d = np.arange(12).reshape((4, 3)) print(arr_2d.tolist())
>>39 前は素の python 入れて pip してた
Anaconda + conda 使ったこともある
Thonny + pip も良いと思う
np.arange(12).reshape((4, 3)).tolist() [[y * 3 + x for x in range(3)] for y in range(4)]
>>41 [list(range(i, i+3)) for i in range(12)[::3]]
import more_itertools list(more_itertools.chunked(range(12), 3))
[np.array([0, 1, 2]) + 3*_ for _ in range(4)]
>>41 さらに短くできた
[list(range(i, i+3)) for i in range(0,12,3)]
もう出尽くしたやろ、ワイのが一番やな、組み込みのみだし直感的だし
応用もきくし、ワイが一番やろw
>>39 WinPython+VScodeが正解だぞ
anacondaは、Pythonを習得し、Pythonと外部ライブラリの境界を把握できるように
なった人のうち、anacondaを必要とする人だけが使うものだ
>>39 Pythonで何やりたいのかわかんねーからてきとーだけど
Dockerコンテナにanacodaとvscodeが正解
dockerはdockerの勉強になるしwindowsだと安定しないから要らんな
pythonのライブラリを調べているのですが C言語で書かれている部分(cソースコード)には どうやってたどり着けばいいのでしょうか? 例としてrandom.random()が0.0以上1.0未満の浮動小数点数を かえしますが、どうゆう仕組みで返すのかを調べたいのです
>>53 コンパイル済みのを一般に調べるのは無理。標準ライブラリなら例えばcpython のリポジトリから探せる。
https://github.com/python/cpython >>54 回答ありがとうございました
_randommodule.cまでたどりつきました
少しハードルが高いですが頑張って理解に努めようと思います。
>>55 蛇足かもですがpython の乱数はメルセンヌツイスタというアルゴリズムなので調べてみるといいかもしれません
>>56 _randommodule.cの中に日本人の名前があったので
何故だろうと思いましたがメルセンヌツイスタで検索したら
つながりました。感謝です
教育用なら圧倒的シェアを獲得しているVSCodeの方が良いと思うよ
>>39 教育に、環境構築の手間を含められるかどうかによるかな。
純粋にプログラムとは何かを知ってもらうだけだったらcolab
Pythonスクリプトをちゃんと動かせるようになることが目標だったらWindows用のPythonかなぁ。
ideoneでいいじゃん。 colabより高性能だよ。 公開されてしまうが。
そいや親戚のとこの子供が学校でPythonのプログラムやっているというのだが、 ああいうのって、どういう仕様の実行環境なんだ? グラフや絵を描けたり、画面上のピアノの鍵盤叩くと音が出せるとか、 なにやら色々とできるようなのだが というかpipであれこれ山盛りにされてる環境にも思える Scratchだと思ってた
ideoneとColab(Jupyter)だと機能がダンチだから土俵がちがう
>>63 MakeCodeとかUI Flowのあたり?
ブロックプロラミングとPythonを行ったり来たりできる
vscodeって途中のコードいじってると下記の折り畳み全部開いちゃうじゃん。あれ超鬱陶しい
関数の引数型説明(アノテーション?)をつけるとき、intやstr等の組込み型ではなく、クラスのインスタンスの場合どのように書けばよいでしょうか
https://docs.djangoproject.com/ja/3.2/intro/tutorial05/ このページの最初のコードをshellモードでやってもtimezone has no 'now'って出るんだけどなんでだよ
ついでにいうとsettings.pyでuse_tz = Falseにすると逆に日本時間になってTrueにするとUTCになる
解決 from django.utils import timezone じゃなくて from datetime import timezoneって書いてた
>>70 https://homepages.cwi.nl/ ~jack/macpython/index.html
これだとバージョン古いからMac-on-Linux化してLinux側で動かすか
リモートでもいいならWebブラウザのGoogle Colabやクラウド上のLinuxでやれる
>>67 例えばpandas(pd)のデータフレーム(df)なら
import pandas as pd
def some_func(df: pd.DataFrame, some_num: int = 42) -> pd.DataFrame:
df2 = df.cooy()
# 処理
return df2
leetcodeの問題解いてるんだけどさ コードをvscodeとかのエディタ上で再現しようとしてもinputはleetcode側がやってるから、コードコピペしてもうまく動かないってことか? Input: strs = ["flower","flow","flight"] class Solution: def longestCommonPrefix(self, strs: List[str]) -> str: # 回答をここに書いた こういうクラスを実行する場合って solu = Solution() solu.longestCommonPrefix() こんな感じにすると思うんだが、エラーが NameError: name 'List' is not defined とかになるんだよね
エラー文も読めないのか 新しいpythonならlist[str]だバカタレ
>>75 そこだけの話でいうと
from typing import *
だけど、問題のコードが古い
今はListをlistと書くようになったから
nameErrorとかattributeErrorと最低限のエラーぐらい読めるようになろう 問題といてる場合じゃない
>>1 def reverse(url): return url[::-1]
lst = [ ['=v?hc','taw/','moc.e'], ['.www','//:sp','tth'], ['but','uoy'] ]
yt = ''.join( lst[0] + lst[2] + lst[1] )
id_lst = ['MOYukLAWwkK', 'A4c_Lbwf-Jw', '0glgH5rR_po']
for id in id_lst: print( reverse( id + yt ) )
"".join("ht_t_ps://ja_.wiki_pedia.o_rg/_wiki/朝鮮神宮".split("_"))
>>1 reverse = lambda *argv: [ '//:sptth'[::-1] + url[::-1] for url in argv ]
lst_url = reverse('IPq5AyxxvpM=v?hctaw/moc.ebutuoy.www',
'0EgauYFUN8N=v?hctaw/moc.ebutuoy.www',
'48132/-/selcitra/pj.tnediserp',
'4456111984139806941/sutats/oobnolihsusta/moc.rettiwt',
'81605591320X602502201/txt/elpmis/pj.og.ldn.iakkok',
'1021=morf?15978662os/hctaw/pj.oedivocin.www',
'8xebddeeiYY=v?hctaw/moc.ebutuoy.www')
print(*lst_url, sep='\n')
これを三項演算子で書くことってできますかね? if a: if b or c: print("1") else: pring("2")
5chはインデント未対応なので pythonコードを貼るときは 行頭インデントを全角アンダーバーで 埋めてください
こんなかんじです a b c は true か falseが入る変数です if a: _if b or c: __print("1") else: _print("2")
>>86 print((1 if b or c else "") if a else 2)
三項演算子ならば全ケース対応する必要がある
a and not (b or c)の場合は空文字列とした
回答になってないが if not a: __print(2) elif b or c: __print(1) でよくない?
a = True, b = False, c = Falseのケースを見落としてるのか 意図して何もしてないのかが読み手にはわからないからすごく気持ち悪い
テキストだと以下のようになるんだけど # 整数(Python の int 型)の要素をもつリストを与えた場合 x = np.array([1, 2, 3]) x.dtype 結果 dtype('int64') 自分の環境だとdtype('int32')になるんだよね これってあんまり気にしなくて良い部分? ちなみに以下のはテキストと同じ結果になる # 浮動小数点数(Python の float 型)の要素をもつリストを与えた場合 x = np.array([1., 2., 3.]) x.dtype 結果 dtype('float64')
numpyのintはC言語のlong あなたの環境はWindowsで本はLinuxなのだろう
>>90 OSの32/64と
pythonの32/64と
それぞれどっちが動いてるかは意識するべき
>>82 'stnemugra-gnikcapnu-tut#lmth.wolflortnoc/lairotut/3/aj/gro.nohtyp.scod//:sptth'[::-1]
jupyternotebook で実行中のセルからほかのセルを呼び出して実行できませんか? マジックコマンドをみてもそれらしきものがないような vbaでいえば、セルをプロシージャ、ノートブックをモジュールのように扱いたいのですが・・
86ですが回答ありがとうございました。 これでいけそうです print("b") if not a else print("a") if b or c else print("c")
>>96 モジュール化するのはだめなんか?
インポートしたらいいじゃまいか
>>90 気になるなら
x = np.array([1, 2, 3], dtype=np.float32)
""と''の違いってある? 単に出力の違いとかじゃなくてコードを書く上での使い方の違いとか
>>98 ありがとうございます
検索すると、実行セルのipynbとは別のipynbファイルおよびセルをインポートする方法はあるのですが、
実行セルと同じipynbファイルにある別セル(例えば、実行セルの一つ上のセル)を呼び出したい
場合は、自分自身のipynbをインポートするということでしょうか?
インポートするipynbのセルすべてを実行するとあるので、素人感覚では無限ループになってしまうそうなのですが・・
呼び出される側のセルをpyファイルに出力してそのpyファイルをインポートすればいい話かもしれませんが、いちいち
pyファイルで書き出すのもなあ…と 理解が悪くてすみません
>>104 ありがとうございます
それでももちろんできるのですが、呼び出される側のセルを単体で実行することも多く、また同一ipynbのその他多くの
セルからも呼び出したいのです(処理が共通している
vbaだと、publicsubプロシージャで独立させてしまえばいい話だったので同じことがしたいなと
blenderでpythonスクリプトを使ってキャラクターの目のまばたきの動きを制御してるんですがやってることをグラフで表すとこんな感じで
yにどのくらい目を動かすかの数値が入り
xにアニメーションの経過フレーム数が入るとして
xが0のときyは0 xが3のときyは6 という条件があるものとして
それをグラフで表すと増量が一定ならば一番左のグラフのようにyが2ずつ増えるグラフになると思いますけど
これだとまばたきが毎回同じ動きになってしまうので変化をつけたいんですが
たとえば真ん中や右のグラフのようにyの数値が不規則に増えていくグラフを計算するたびに作成するみたいなことをしてまばたきの動きに変化をつけたいんですが
それに使える関数とか計算式みたいのってないですかね
この分野はド素人だが CSSにはanimation-timing-functionってのがあって似てる
dictionary_one = {"a": 1, "b": 2, "c": 3} dictionary_two = {"c": 3, "d": 4} merged1 = {**dictionary_one, **dictionary_two} print(merged) # {'a': 1, 'b': 2, 'c': 3, 'd': 4} merged2 = dictionary_one | dictionary_two print(merged2) これの "merged1="部分と"merged2 ="部分ってやってること同じという認識でいいのかな?
速度はほぼ同じ しかし今の時代に演算子にやらせる処理じゃないな それも論理演算子を想起するものを使うとか正気と沙汰とは思えない Guidoも演算子推してたけどセンスが悪すぎないか?
論理演算自体、集合演算と切っても切れない関係だから、まるで違和感ないな
dictを拡張するPEPは、setに準じた挙動にするのが目標の一つだったから、どう転んでも論理演算子のオーバーライドは外されなかっただろう
>>112 dictは集合演算じゃないからね
a | bで両方にkeyがある場合はsetと同じくaが採用されるならまだよかった
>>113 最初は+で提案されてたんだぞ
それにsetに準じたいなら何で他の演算子は実装されないのさ?
inplaceじゃないdict.updateが欲しかっただけなのに それをメソッドで用意できないところがPythonの限界 sort/sortedやin演算子に共通する基本的API設計の問題だから Pythonはそういうもんだと諦めて 用意されたものを使う事だけに専念した方が精神衛生上いいよ
>>114 keyに注目すれば集合演算そのものじゃん。
valueという属性が各keyに付いてるというだけ。
大体、
>>111 はsetだったら納得したのかね
不毛な返しだな 潜在的に不幸な奴はどこでどんな生活をしてても不幸だって言うだろ 同様にどこでどんな仕様の言語を使ってても不平を垂れてんだよ
誰と会話してるのか知らないが Pythonこそ人類最大の功績だろ いかがわしいウェブサイトの構築からAIや研究畑まで広がる広大な活躍範囲 JavaもRubyも要らんかったんや
>>118 setのunionやintersectionの演算子は違和感ないぞ
それにsetの場合は穴にはまるような仕様もないし
__or__以外の通常メソッドも用意されてるから全然状況が違う
dict1 | dict2で同じ(hash値の)keyが両方にあれば keyはdict1からvalueはdict2から取ってくる 一般的な論理和の定義とは明らかに異なるけど これをpythonではdictの論理和と呼ぶことにしたのならそれでいいんじゃない
>>120 原理主義者w
読みやすさがダンチすぎるわな
あとは高速にさえなれば最強
>>123 keyは同じものなんだからどっちからもってきてもいいだろ。
仕様でもvalueをdict2から持ってくることだけしか決められてないんだからそんなところに依存するコードを書いたらお前が悪いとしか言えん。
あと同じhash値ってだけで同定されると思ってるみたいだな
picture(数字).pngで連番のファイルを生成したんだけどpathlibでディレクトリの中身覗くと picture0.png picture1.png picture3.png picture2.png picture4.png みたいな順番になってる事があってなんだか気持ちが悪い これって何が原因なんです?pathlibの仕様?
iterdir()とiterdir()が使ってるos.listdir()の仕様
lenovoのL420っていうノートパソコン使っています celeron,4GBです 教科書レベルのプログラムを写経してます 画像ファイル256枚、一枚あたり30kb位のファイルを 重ねる画像処理をpythonで行っているのですが MemoryErrorがでて処理が止まります 画像処理の分野ではよくあることなのでしょうか メモリ空きスロットが無いです 今までメモリ不足なんて無かったのですが PC買い替えでしょうか?
>>131 エラーメッセージを読んでエラーの原因をまず確かめろ
ハード的なメモリ不足よりプログラムの書き方が悪い可能性のほうがはるかに高い
#次のような集合のリストのリストrを作りました: r = [[set(range(1,4))]*3]*3 > print(r) [[{1,2,3}, {1,2,3}, {1,2,3}], [{1,2,3}, {1,2,3}, {1,2,3}], [{1,2,3}, {1,2,3}, {1,2,3}]] #上から2番目、左から3番目の集合を更新して要素を1のみとしました: r[1,2] = {1} #するとr[0,2]とr[2,2]も{1}になっちゃいました: > print(r) [[{1,2,3}, {1,2,3}, {1}], [{1,2,3}, {1,2,3}, {1}], [{1,2,3}, {1,2,3}, {1}]] r[1,2]以外が変わった原因と、r[1,2]以外が変わらないような方法教えて下さい
>>133 訂正
r[1,2]じゃなくてr[1][2]でした (他同様)
[[set(range(1, 4)) in x for range(3)] in y for range(3)]
>>136 ありがとうございます〜forとin換えたら行けました
>>135 検索してdeepcopyの話かな?という所には辿り着きましたが適応の仕方がよく分かりませんでした 勉強しときます
ほとんどの言語は、shallow copy 実体をコピーしない。 ポインター・参照しかコピーしない 実体をいじると、それを参照している全ての参照に影響が出る。 実体を参照を通して見ているから なかなか簡単には、deep copy できない。 参照のリンクを切り離せない Elixir みたいな関数型言語は、 オブジェクトを更新できない(状態を持てない)から、 こういう問題はなく、安全にプログラミングできる
特定のフォルダ以下のサブフォルダから拡張子を取得して 指定したフォルダ下に拡張子のフォルダを作りたくて 下記のプログラムを書いたところで動作しましたが os.makedirs文のみで完結する簡素な記述方法はありますか? cd_path ← フォルダを作りたい場所 file_extension ← FOR文で取得した拡張子 path = os.path.join(cd_path, file_extension) os.makedirs(path, exist_ok=True)
>>141 回答になってないけど、初心者なら最初からpathlib覚えたほうがいいぞ
os.pathやglob.globはいろんな罠がある
あと、拡張子にはドットが含まれるから注意
みんな一時は罹ってしまうコードゴルフ 中二病にちかい
配列(array)の要素それぞれにリストを入れることは出来ない? リストの要素それぞれに配列を入れることはできる? でいいのかな?
あまりやらないけれど 配列の要素はそれぞれ任意のものを入れられるから 最初に配列、次に文字列でもすきなクラスでも大丈夫 もちろんぜんぶ配列でもOK
dictのキーにString型のリストとバリューにリストに入った多重結界みたいなデータ作ってjsonとして書き出すみたいな遊びだよね
https://github.com/yaneurao/Ayane のunit_test1.pyの、一番基本的なtest_ayane1を通そうとするとプロンプトにtest_ayane1 : とだけ
でてwrite_workerの734行目のself.proc.stdin.flush()でスレッドが死んでるような?感じなのですが
試して原因を教えてくれる神はいませんか。
ちなみに呼び出すエンジン自体は別のソフトや、cshogiというこれと似たライブラリからの呼び出しでちゃんと
動作していることを確認しています。
>>147 Python 3.7.13で、macOS12.4 Montley上です。
socketのサーバー側で i=0 while True: data=soc.recv(受信サイズ) if not data: break data_sum+=data with open(f"保存するファイル名_{i}.zip",mode="ab") as f: f.write(data_sum) i+=1 みたいにするとクライアント側が送信したデータの他に数個のzipファイルが出来るんだけどこのデータの中身は何なんだろう? zipfileで開こうとするとエラー出力しちゃう 変数iを使わずに受信するとクライアントが送信したデータだけが残るみたいだけど…
FOR文の中にtqdm()を入れてみたんんですが 下記みたいなのしか表示されなくプログレスバーが表示されません 70786it [3:35:59, 1.94it/s] なにが問題なんでしょうか?
>>152 lenが不明なiteratorだとそうなる
tqdm(iterator, total=100)のようにする
>>150 VSCode で、バイナリエディタの拡張機能・Hex Editor でも使って、バイナリとして見てみれば?
文字コードなどが不明なので、テキストとして見るには困る
適当に内容を作って、ファイルの拡張子を .zip にしても、
正しいZIPファイルの形式になるはずがないので、ZIPファイルとしては動作しない
各拡張子のファイルには、決められた構成があるため、
それに従っていない場合は、正常に動作しない
Pythonでsetの要素がイミュータブルでないといけないのはなぜですか? a = [1, 2, 3] b = [4, 5, 6] c = [7, 8, 9] S = {a, b, c} a.append(0) この状況で、 a in Sの値が偽になっても別に構わないと思います。 Sに登録した時点でのaは{1, 2, 3}だったわけですから、 d = {1, 2, 3} d in Sが真になりさえすれば何もおかしなことはないと思います。
S = {a,b,c} TypeError: unhashable type: 'list'
こういう馬鹿が辞書のキーにまでリスト入れたいとか言い出すんだろうな
>>159 Pythonのオブジェクトは基本参照だし、setに突っ込んでもコピーされる訳じゃない
重複を許さないsetの要素が変更されたら保証できないし、比較のコストも考えたら…かな
>>159 自作クラスとか、mutableでもsetに突っ込めるよ。
何か読み違えたのでは?
>>163 本質的にはそうじゃない、ユーザークラスは既定でハッシュ化できるが
これは一般的な実装ではid()、即ちインスタンスアドレスに基づくもの
実質的に求められているのはハッシュの不変性であり、それならば通る
しかし同一性を内容で評価するなら意味は成さないのでlistだと未定義
データモデル曰く「クラスがミュータブルなオブジェクトを定義しており、
__eq__() メソッドを実装しているなら、 __hash__() を定義してはなりません。」
やってやれないことはないけど デメリットを打ち消すだけのメリットを見いだせなかったんでしょGuidoが 単に他の言語のdict/setに合わせただけかも知れんが ともかく、真実が知りたかったら開発者に聞いてこいよ
>>95 print('QHG pj.og.ldn.iakkok:etis'[::-1],
'/elpmis/pj.og.ldn.iakkok//:sptth'[::-1], sep='\n')
PCでのアプリ操作を自動化したいのですが、pyocrで文字認識して、内容によって判断し、pyautoguiでxy座標指定して、ボタン押すしかないでしょうか?
PyAutoGui でカバー出来るか出来ないかを判断してみたら?
以前MACにいれたpython3を削除できないです。 % rm -rf /usr/bin/python3 rm: /usr/bin/python3: Read-only file system % sudo rm -rf /usr/bin/python3 Password: rm: illegal option -- ? usage: rm [-f | -i] [-dPRrvW] file ... unlink file 原因わかる方いますか?
>>171 sudoのほうは全角スペースが入ってるのが原因
そのpython入れたのはAppleだから通常起動したOSからは削除できない仕組み 消えたらOS内のスクリプトが動かなくなるよ よかったねOSが壊れなくて
>>172 迅速なレスありがとうございます。
もう一度コメント打ちましたが同じ結果でした。全角は入ってないようです。
>>174 MACから元々インストールされているのはphyon2なので
Phyon3とは関係ない、削除しても問題ないと思うのですが..
>>175 何経由でインストールしたんだこれ
Homebrew使ってインストールしたなら
brewコマンド経由でアンインストール出来ない?
>>175 python3入ってないmacOSってわりと古いよ?
ここ最近はpython2が逆に入ってない(公式サポート終わってるからね)
もし自前で /usr/bin にインストールしたってんならクラッカー気質あるわw
>>175 同じ結果とちゃうやん
全角入ってた時とエラーメッセージ変わってるやん
どうしても削除したいならSIP無効にしてから削除で
>>175 追記 すみません自分の勘違いでこのpython3はデフォルトから入ってるファイルのようです。
>>177 さんの仰る通りでした。申し訳ありません。
そして再度インストールしようとhomebrewを入れpyenvを入れ
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
を追加し
source ~/.zshrcを実行してpython3.10.4をインストールするとうまくいきません。。おまかんなのでしょうか??
>>179 自決ですが、xcodeが古かったので新しいバージョンにいれた所無事インストールできました。
またしても犠牲者が。 pythonの乱用は精神に作用するのかもしれない
日本人が作った、多言語バージョンマネージャーのanyenv を使えばよい。 同様のツールには、asdf もある nodenv, pyenv, rbenv, exenv, goenv, tfenv など node, python, ruby, elixir, go, terraform など 他には、Docker も多い
re.subで[]で囲まれた文字列の中を置換するとき、どんな記述をすればよいですか? re.sub(r'\[.*c.*\], 'x', '[abcabc]abc') 期待する値 [abxabx]abc
>>185 re.sub(r'\[[^\]]*\]', lambda m: m[0].replace('c', 'x'), '[abcabc]abc')
>>186 多謝!! そしてごめんなさい。良ければ解説を。
[]の中だけを対象にreplaceしているのは、なんとか分かるんですが、re.sub の第2引数、 lambda m: m[0].replace('c', 'x') が何をしているのかわかりません(泣)
repl が関数であれば~の下りね、m[g]はm.group(g)と同等 後読みアサーションに固定幅制約がないライブラリなら 面倒なことしなくても(?<=\[.*)c(?=.*\])で済みそうだが
re.sub(r'\[.*\]', lambda m: m.group(0).replace('c, 'x')
でlambda関数がヒットするたび呼ばれるわけか!!
仕組みは理解できました。
>>190 look-behind requires fixed-width pattern
に阻まれました。
m.group はめんどくさい findall の方が便利
>192 re.findall だと re.sub のような仕掛けが利用できなくないですか? >185 できますか??
re.findallで[]付きとそれ以外に分けて処理 ちょっと長くなるけど色々応用がききます # []の中だけreplace >>>re.findall(r'\[[\w]+\]|[\w]+', 'a[abcabc]abc[abc]') ['a', '[abcabc]', 'abc', '[abc]'] >>>[m.replace('c', 'x') if m[0]=='[' else m for m in _] ['a', '[abxabx]', 'abc', '[abx]'] >>>''.join(_) 'a[abxabx]abc[abx]' # []の中以外をreplace >>>re.findall(r'\[[\w]+\]|[\w]+', 'a[abcabc]abc[abc]') ['a', '[abcabc]', 'abc', '[abc]'] >>>[m.replace('c', 'x') if m[0]!='[' else m for m in _] ['a', '[abcabc]', 'abx', '[abc]'] >>>''.join(_) 'a[abcabc]abx[abc]'
完成形できました!記号が含まれていても[]がちゃんと閉じてなくても
ちゃんと閉じているのだけreplaceします
>>186 が秀逸だけど、[]で囲まれていない方をreplaceするとなると
途端に難しくなるから、やっぱ私の方法が良いんじゃないでしょうかw
>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*|[^\[\]]*', 'a[abcabc]abc[abc]')
['', 'a', '[abcabc]', '', 'abc', '[abc]', '']
>>>[m.replace('c', 'x') if m and m[0]=='[' else m for m in _]
['', 'a', '[abxabx]', '', 'abc', '[abx]', '']
>>>''.join(_)
'a[abxabx]abc[abx]'
# 文字列に記号が含まれていて[]がちゃんと閉じていなくても大丈夫
>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*|[^\[\]]*', 'a[abcabc]abc[abc$$[abc]')
['', 'a', '[abcabc]', '', 'abc', '[', '', 'abc$$', '[abc]', '']
見通し悪すぎて要件満たしててもレビューで蹴られるコード
ちゃんと閉じているの定義があやしい [[abc]とか
>>196 見通し良いでしょ、角カッコで囲まれた角カッコ以外 or 角カッコ or 角カッコ以外でfindallじゃん
角カッコしか出てこないじゃん、簡潔、シンプル、分かりやすい
>>197 良い指摘、アナタのおかげで改善されました^^
>>>re.findall(r'\[[^\[\]]*\]|[\[\]]*?|[^\[\]]*', 'a[abcabc]abc[[abc]')
['', 'a', '[abcabc]', '', 'abc', '', '[', '[abc]', '']
ナンプレのゲーム作りたい
縦横はチェックする方法わかるが
3x3マスの部分だけ配列で考える方法がわからない
↓までは考えたんだが方向性が違う気もする
https://techiedelight.com/compiler/?xIkw 9進法から3進法への変換がベース(ただし3進法は0から始まる)
for x in range(81)
x // 3
x % 3
3桁目に入る場合、1桁目に(3桁目)*3が足される
10 (1,0,0)→(0,3)
4桁目に入る場合、2桁目に(4桁目)*3が足される
28 (1,0,0,0)→(3,0)
簡単なのは3x3を座標系とは別の9マスの配列の配列として保持 置いたときに縦横とは別にその配列へ反映させる 縦横も同じ手法をとると統一感ある コード上は9マスの配列はクラスにするかも
5桁8色のhit&blowを造りたい 人間が設問してpythonに解かせたい
>>201 既存の座標系にこだわらないほうがいいか
ありがとう
ナンプレのゲーム作りたいから手始めにナンプレを解くプログラムの検証をしてたんだけど
https://techiedelight.com/compiler/?b-I8 37行目の部分ってどうなってるの?
再帰関数なのはわかるんだけど、if文の中で再帰してるじゃん
def 関数():
if 再帰関数():
retrun Ture
retrun Flase
>>203 再帰だけどやってることは探索のための分岐
rangeの列挙からcontinueされなかった分を順番に分岐してて
呼んだ先で18-20にひっかかると中断して最初の呼び出しまで戻ってる
deepcopyしてるところが富豪的だけどシンプル
>>204 この37行目
if set_num(ndata, idx + 1): return True
これを
set_num(ndata, idx + 1)
に変えてみたんだけど結果変わらなかった
if の中に入れる意味あるの?
答えが出た後も探索しちゃうからそれを止めるための処理ってことか
google colabでcuda使いたい。 良い方法ある?
google colabでcuda使いたい。 良い方法ある?
>>210 colabはdjangoやfraskができないっぽいからやってない。
もしdjangoが使えるならお勧めあったら教えてほしいっす!
vsかチャームか、atomか・・・。
好きなテキストエディタないの?それで基本いいんだけど 拘りないなら拡張とユーザ数からvscodeでいいんじゃない PyCharmはリファクタまわりが優れているけど必須じゃないし Atomはオワコン
vsもマイクロソフト以外のプラグインが信用出来ないからあまり良いとは言えないかなー
文字列〜〜〜ID123456.text みたいなファイルからID123456だけを抜き出したいんだけど、どんな方法がある? IDの後には必ず数字がきて、桁数はかならず6
補足 IDが書かれてる場所はファイルによって異なる 文字列〜〜〜ID123456文字列〜.text ID123456文字列〜〜〜.text みたいなときもある
>>214 普通は正規表現でも使うのかな
俺は正規表現使えないからこう書く
from pathlib import Path
p="C:\abc\あいうID1234567XYZ.text"
print("ID" + Path(p).stem.split("ID")[1][:6])
>>215 正規表現を制する者は文字列を制する、他の言語でも仕様はほぼ同じ、覚えて損は無し
>>>import re
>>>s='''文字列〜〜〜ID123456文字列〜.text
・・・ID789012文字列〜〜〜.text
・・・みたいなときもある'''
>>>re.findall(r'ID\d{6}', s)
['ID123456', 'ID789012']
>>216 >>217
ありがとうございます、勉強になります
例外処理ってどう使えばいいんだろ スクレイピングしてあるサイトのデータ拾いに行って ”データ”がある場合に代入となるんだけど 拾いに行くページによって、その行自体がなくてエラーになってしまうんだよな if Data[0][0] == ”データ”: s = Data[0][0] Data[0][0]がそもそも存在しない時にエラーにならないよう例外処理を使うといい、ぐらいまでは調べたんだけど 書き方がよくわからない
>>218 より具体的な例としてC:/hogehogeディレクトリ内の全ファイルのファイル名からIDを抜き出します
>>>import pathlib, re
>>>src = pathlib.Path('C:/hogehoge')
>>>list(src.glob('*')) #ファイル確認、この例ではディレクトリ内にファイルが2つあります
[WindowsPath('C:/hogehoge/ID789012文字列〜〜〜.text'), WindowsPath('C:/hogehoge/文字列〜〜〜ID123456文字列〜.text')]
# 以下、ID抜き出し処理
>>>l = [re.findall(r'ID\d{6}', f.name) for f in src.glob('*')]
>>>l
[['ID789012'], ['ID123456']]
>>>sum(l, []) #フラット化
['ID789012', 'ID123456']
>>219 データがなかった場合にどう処理したいのかによって
例外処理にするのかif-elseみたいな分岐処理にするのかを選択する
スクレイピングの場合は対象データがなかったら
何も処理しないとか空文字とかのデフォルト値を入れる場合が多いんだけどそのやり方もいろいろ
if-elseで簡易的な関数にした例
def extract(html, selector, fn, default=""):
return fn(element) if (element := html.select_one(selector)) else default
def extract_text(html, selector, default=""):
return extract(html, selector, lambda x: x.text.strip(), default)
def extract_link(html, selector, default=""):
return extract(html, selector, lambda x: x.get('href'), default)
>>219 スクレイピングでたとえると
途中の要素が取得できないと結局な結果が得られないのでその場でプログラム終了する
とすると、取得失敗の都度ifでsys.exit()と書けはする
ここで終了前になにかメッセージ出力したり上位の関数にエラーで戻ったりアレコレしたいとすると
共通化したくなり例外以外では見通しが悪く書きにくい
そういうのもうまく関数設計すれば書けはするけど
Pythonは標準の操作(Data[0][0] とか)で例外あげる場面が多いので例外に寄せる方が楽
Pythonのトップ・キノコードがキノクエストと言う、Pythonの学習サービスを作った!
s = ’aaa bbb ccc ddd’ という文字列を s = ’[aaa],[bbb],[ccc],[ddd]’ という文字列にする方法って s.split() で一度リストにして for文内で新しいリストにappendとか使って [ や ] や , をリストの要素として追加して そのリストをまた文字列に戻すって方法しか思いつかないんだけど、他にあるかな?
>>224 s = '[' + s.replace(' ', '],[') + ']'
s='[' + s.replace(' ',']',[') + ']' これでいけんか?
かぶったし打ち間違いあるしスマホでコード書くの合わないな…
“,”.join(map(lambda x:f”[{x}]”, s.split(“ “))) そらで書いてるから動くか分からんが、こんな感じ
あと方法としてはjoin使うのとリストをそのまま文字列にするのができる気がする
教科書的に書くとつまらんな ','.join(f'[{x}]' for x in s.split(' '))
python使い始めて何年も経つが ‘,’.join(…)書くたびにクソコード書いてんなと思う
>>234 読んだけど結構乱暴な議論だな
> 文字列にするのだから文字列のメソッドであるべき
数字かどうかを判定するisdigit()をboolのメソッドにしろってか?w
>>234 じゃsplitはリストにするのだからリストのメソッドであるべきだなw
ちゃんと議論ww
Pythonって何故だかこういうエクストリームな擁護者が他言語に比べて多いんだよなぁ どの言語にも良い点悪い点はあるのになんでなんだろ?
エクストリームな擁護ならRubyの右に出るものはないよ 「日本人ならRuby」「楽しいからRuby」だもん、初めて聞いた時は寒気がしたね RubyじゃなくてPython選んでマジで良かった、Python最高! joinもsplitの話ももう出尽くしているから、勝手にググってフンガーって発狂しててよ 私に言われても困っちゃうし、公式で結論出ているのだからそれで理解できないなら素養が無いよ
あ~あ、みんな寄ってたかって叩くからファビョっちゃったじゃん
>>237 pythonのスレ(しかも超初心者用)で言うことですか?
超初心者に変な常識を植え付けないように色んな意見のレスがあっていいと思うよ 変だと思う人も居るんだなということを知ってて損は無い 超初心者だと他言語における常識を知る機会も無いし
>>238 > 私に言われても困っちゃうし
これお前の意見だろ?
> 文字列にするのだから文字列のメソッドであるべき
リンク先も公式もそんなアホなことを言ってないぞw
>>242 ひゃーファビョッちゃってるぅーw
素養も読解力も無いことをアピールされましても困りますw
>>243 レスするならちゃんと反論したら?
読解力ガーとか低脳が顔真っ赤になりながらレスしても虚しいだけだろw
スレ違い自演連投荒らしが誰何に反応して身元確定したので新スレで書き込み禁止されたのを「いじめ」だと言い出す被害妄想っぷりが狂人クオリティ
>>244 IDコロコロ変えるコロ助が何をファビョってんの?w
もう
>>238 で終了してんだよ、公式読んで理解できないなら反論も糞も無いじゃんw
認めたくないだろうけど、そこは認めようよ、君は低能だから理解できなわけよww
別に理解できなくてもいいじゃん、joinって変だな、何でなんだろう?ってずーっとファビョってればいいじゃん
こういう経緯でこうなってんだよってリンクまで貼ってんのに、それで理解できずにそんなことなーい!って
言われてもさ、公式に文句言えばいいじゃん、ほんと低能だなぁーw 何と戦ってんの?w
>>246 どっちが読解力ないだか...
もう一度書いとくね、
> これお前の意見だろ?
>> 文字列にするのだから文字列のメソッドであるべき
公式もリンク先も関係なくお前がアホなだけw
>>247 うん?じゃあ文字列のメソッドでなくてもいいの?
どーやったらそう読めるんだよwwwwバーーカwww
>>249 まだ恥の上塗りするのかよw
「文字列にするのだから」がアホだって話な
>>235-236 のツッコミみたら普通わかるだろ
わざと馬鹿のフリしてんのかな?どっちにしても馬鹿にしか見えないが。
読んだけどseqは引数な方が良いってだけで > 文字列にするのだから文字列のメソッドであるべき こんなこと書いてない
>>250 君が読解力無いのは分かったから、それよりIDコロコロ変えているのバレちゃったねw
>>247 の「もう一度書くね」でヘマしちゃったのはやっぱりファビョってるからなの?ww
これ全部オマエだろ、何連投してんだよw顔真っ赤なのどっちだよって話だよ
いやー自作自演バカって本当にいるんだなぁー アホなりに頑張ってるのは分かるけど低能だから
全部台無しだわぁ〜ww アホだからすぐバレちゃうwww
そのIDコロコロ変えるようになった経緯を思い出せよ、まともにやるとすぐ負けちゃうからだろ?
自作自演で勝ってる感が欲しかったけど、それも手に入りませんでしたぁ〜w 恥の上塗りって
自分のこと言ってんのかよww 全部ブーメラン!おまえは民主党かよってw
こんな人生終わってそうな社会不適合者でも稼げちゃうのがIT業界なんだよな 人生終わってそうな外見のやつばかりなのに、金が稼げるからジョーカーみたいなのが生まれにくい
iterableを定義してそこにjoinメソッドを追加するだけでよかったのにね joinメソッドは今どきこんな設計する人がいたらすぐ外されても文句言えないレベル
当人ちゃうけどまず
>>234 のリンク先読んどこう
俺も当人ちゃうけどそのリンク先読んでも
>>258 に同意するわ
超初心者が質問できるスレであって住人全員が超初心者というわけじゃないよ
メーリングリストのログ追ってみたが議論らしい議論は全くなかったぞコレ Tim Petersが案をだして、じゃそれでくらいのノリ
悲しいとき〜、悲しいとき〜、不毛な努力をしているアホをみたとき〜
少し内容がずれているかもしれませんが質問させてください。
Windows10で右クリック-新規作成で空のpythonファイル(.py)を作成するようにしたいのですが、
何か方法はありますでしょうか?
下記のURLを参考にしてレジストリを変更する方法を調べて実行したのですが、反映しません。
https://qiita.com/ioComk/items/ab79749b0f0bf05db97e 教えていただきたく。よろしくお願いします。
>>258 実際bytesとかでjoin相当のことをしようとしたらどうすればいいんだろう?itertools使えばなんとかなりそうだけど
__add__かjoin専用メソッドがある前提でひたすらinject それらが型変換できないケースだと失敗とか
>>265 少なくとも今試しても記事の通りできた
詳しくどうやったか開示しないと分からん
>>268 詳しくといっても難しいですが
pythonはAnacondaでインストール。
新規pyファイルはサクラエディタと紐づいています。
>>269 そしたらサクラエディタに関連付けしてるからだろうね
新規作成は関連付けされてるアイコンとファイルタイプ名称で表示される
なんでこうなるのかわからない _, *elements , _ = [1, 2, 3, 4, 5, 6, 7, 8] print(elements) # [2, 3, 4, 5, 6, 7] print(type(elements)) # <class 'list'> elements_B = [1, 2, 3, 4, 5, 6, 7, 8] B = _, *elements_B, _ print(B) # (8, 1, 2, 3, 4, 5, 6, 7, 8, 8) print(type(B)) # <class 'tuple'>
ああ、理解したわ a, b, c = 1,2,3 a=1 b=2 c=3 ってのと変わらんのか a, *b, c = 1,2,2,2,2,3 a=1 b=2,2,2,2 c=3 みたいなことか
bytes で join ってさ b''.join(bytes_data) で良いんじゃね
2^26倍精度浮動小数点数の最大値
(2^((2^(111-1))-1))*(2-(2^-2147483536))
https://ideone.com/3sxXF1 は計算できるが、
2^27倍精度浮動小数点数の最大値
(2^((2^(115-1))-1))*(2-(2^-4294967180))
https://ideone.com/MDO46W は誤差が出て計算できない。
何とかならない?
emaxの最大値は999999999999999999みたいだからどうにもならんのでは
>>266 >>274 https://ideone.com/cEpoSf # joinの問題と言うよりもlist(b'hoge')の方に問題が在る訳だな
def f(a): return a+1 a=[1,2] print(f(a)) >[2,3] みたいなことがやりたいんですが、 関数にまとめてデータを渡して処理してもらうようなことはできないでしょうか 本来はf(1),f(2)とするところです 数が多ければforで回すのですが、まとめてどさっと渡したいです
>>279 なるほど。strをバラしてもstrだが、bytesはバラすとintになってしまうということか。
まあ、実用上は問題ないかなあ。というかここを崩すとbytesを1バイトずつバラしてjoinするという殆どしない操作のために、
strとbytesの実用性がかなり失われるよね
>>280 素直にnumpy使う
ではツマランのでこんなのはどうだろう
def matome(func):
__def process(*list_args):
____return [func(*args) for args in zip(*list_args)]
__return process
@matome
def f(a):
__return a+1
a = [1, 2, 3]
print(f(a))
なるほど、map関数や*list_argsなどのやり方があるのですね
これはどちらもforよりは軽くなりそうな感じはします
>>284 素直にnumpy、がそもそもわかってないのですが、教えていただけませんか?
>>284 無駄な処理があるので修正しときますね
def matome(func):
____def process(list_arg):
________return [func(list_item) for list_item in list_arg]
____return process
>>285 ググレば一発で出てきますよー
import numpy as np
a = np.array([1,2,3])
a+1
_.tolist()
>>286 それだとfの引数が増えた時に対応できない
mapと内包表記どっちが軽いんだろ? a=[1,2] b=[i+1 for i in a] これで終わる話ではあるよね
話を単純化して話してんだろ 一般的な解があるほうが親切
>>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を改造する必要がある
>>290 sumでない場合は?
たとえばa1*a2+a3みたいな一般式もありうるよね
というか、ただのsumなら普通は関数にぶっこまないよね
リストの各要素に1足すだけの場合も普通に関数にぶっこまないけどな
>>292 matomeのデコレータ付けるだけで色んな一般式を適用した関数が簡単に作れるってことね
はいはい、理解しました
fをそのまま可変にすることばかり考えてたわ
>>286 教えてくださりありがとうございます
>>284 のほうが拡張性があって気に入りました
やりたいことはできそうです
ありがとうございました
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…] にするのは筋が悪い
>>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 の方が断然優れていますわ
個別に呼ぶよりまとめて呼んだほうが処理が軽いんじゃないの
FOR文でフォルダ以下のサブフォルダの中のファイルを 拡張子毎に振り分けるプログラムを作ってみましたが 1ファイルを移動するのに1秒くらいかかってしまいます shutil.move(FFF, KKK) (FFFとKKKは変数) この文を削除するとものすごく早くなります どうすれば早くなりますか?
でもあれか、matomeをつけてfを宣言してしまうと、普通にfを使うことができなくなってしまうのか このへん関数を呼ぶときにmatomeをつけるかどうかで使い分ける方法ないのかな
>>302 ごく素直に、fはデコレーターを付けずそのまま宣言する
matomeを適用する関数はf_matome = matome(f)と定義する
>>302 デコレータ付けた関数はまとめてモジュール化するのが一番良いと思う
list_func.f([1,2,3])
なんか頭の可笑しいのが劣化版だしまくるスレになってるな
>>301 srcとdstが同じドライブならos.renameかPath.renameにすれば速くなる
1秒が遅いのかどうかはファイル内容や環境によるから分からない
numpy ぐらい、Python のトップ・キノコードの動画があるのでは? キノクエストと言う、2千円のサロンも始まった
>>301 PythonのバージョンやOS、テストしたファイルサイズ書こうよ
Python3.10.5 Windows10は同じドライブならそんな時間かからないよ
>>305 いじけてないでキミも劣化版出せばいいんだよ
格好つけてたら何もできないぞ
少なくとも
>>280 をやるためにデコレーターはないわ
初心者に対して不要な一般化は余計に分かりにくくするだけやろ やり方自体が御世辞にもいいアプローチとは言えないし
>>310 デコレータみたときは「やられた!」って思ったね
しかも可変、嫉妬してちょっと噛みついてみたけど見事に返り討ち
いやはや、彼のコードはみんなマネした方がいいよ、良いものはどんどん取り入れよう
そういえば、ひろゆきが良く自慢げに言う話を思い出したんだけど、
ゲームを作ってみる授業?か何かで友達が書いたコードがメチャメチャ短かったんだって
上下左右の操作なんだけど、ちょっとした計算で実現していて、それ見たひろゆきが才能の差を
感じてゲームクリエイターをあきらめたとかいう才能の話
それ聞いたときはアホじゃね?良いコードみたらパクればいいだけじゃんって思ったものだよ
たぶんひろゆきはすごくプライドが高くてちょっと躓いただけで諦めちゃうメンタルなんだよね
そんなこんなで出来上がったのがヒマつぶしwとか言って他人の文句しか言わない人間になっちゃった
「頭悪い!」と他人を下げることで自分を慰める毎日、やっぱ諦めずに挑戦するのって大事だなって思いました
そうホリエモンってひろゆきと真逆だよね、ホリエモンは今も色んなことに挑戦している、ホリエモンは輝いているよ
Ruby とか、関数型言語Elixir では、map が基本
他人の話を否定するだけの奴って何の生産性もないよな 低レベルでもコード提示するほうがよっぽど役に立つわ
matomeとmap、どっちが速いんだろうか どっちもforで毎回f呼び出すよりは速そうだけど
処理時間測定してみたらmapのほうが2割前後速かったわ
ついでなんで書いとくね 実行時間 forを使ってf呼び出し:1 matome:0.5 map:0.4
>>322 比較対象は
> 他人の話を否定するだけの奴
だぞ、頭大丈夫か?
普通に考えてリストに関数をそれぞれ適用させたいならmapが一番シンプルでmapと同意の内包表記が最もPythonらしいのでは?
お盆も近いからデコレータに恨みがある奴も 這い出して来ているんでしょう
単にmapの人が、なんでmap使わないんだと言っているだけなのでは? それがデコレータsageに見えると
内包表記の方が断然好きだな〜、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
>>330 なんでzip?
そういう引数リスト専用の関数を作りたいの?
>>280 の望みは「intを引数に取り計算結果を返す関数を、"シームレスに"リストにも拡張すること」だからデコレーターが適当じゃない?Pythonicかどうかは知らん
デコレータは不適当 デコレータは基本的に元の関数を透過的に拡張するために使う物 def f(a, b, c)をデコレートしても デコレート前と同じf(a, b, c)で呼び出し可能で 成功時には同じ戻り値を得られるように作る 高階関数ならなんでもデコレータにすればいいわけじゃない
>>331 そのとおり、
>>280 だけでなく色んなパターンのリスト関数が簡単に作れるのだよ
このデコレータがあればね!
勉強になったわ。 今までPyQtでアプリ作っていたが、@pyqtSlot()がQtデザイナーからのリンクみたいなもんかと思ってました。 すっきりです。
デコレーターのメリットがあるならそれ使えばいいけど遅い上に記述量増えるしね
どう見ても
>>320 だろw
今回の話でデコレータが内包表記より優れているという理屈が理解できない def f(a): return a+1 a=[1,2] print([f(i) for i in a]) これで事足りるでしょ
超絶初心者です。 counter: int = 0 # 他の処理で変わっていく def test(self): user_name = "xxxx" if counter > 0: now = datetime.datetime.now() ..... # 色々処理 now ←ここで nowは参照させたくない、スコープ外にしたい 今だとnow変数はif文が処理されれば値が入ります。 now変数のスコープをif文内だけにするってことはできますか。
self ということはクラスメソッドだと思うけど 他のメソッドから self.test() を呼べば now は隠蔽される。 もしくは頭で now = None しておいて if now is not None: でわけるとか。
>>330 starmap使えばlambdaいらない
>>341 なるほど、でも内包表記の方が見やすいよね!
from itertools import starmap
def get_lists_items(func):
____# starmap版
____def process(*lists):
________return list(starmap(func, zip(*lists)))
____return process
>>342 二択ならね
でもどっちも用途に対してアンチパターンだから使わないのが吉
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です。
>>339 pythonにはブロックスコープがないので
if文の中で新しく作成した変数のスコープをif文内だけにすることはできないよ
>>345 groupとgroupsとそれぞれある
group(0)ならstr
内包表記って普通のforと違うみたいだけど、なんでこんなに速いの?
>>340 ,346,348
339です、どうもありがとうです。言語仕様的にブロックスコープないのはしょうがないですね。
del は試してみたいと思います。
a=[f(x) for x in range(100)] で、今xがいくつのところをやってますとprintする方法はありますか? forを外に持ってくると処理が遅くなってしまうので避けたいです
訂正 a=[f(x[i]) for i in range(100)] にします iの値は関数に持ち込みません 持ち込むのなら関数でprintできますが、それはなしにします
>>352 a = [print(i) or f(x[i]) for i in range(10)]
CPU処理を高速化するのはmultiprocessingを使うことでできたのですが、 今度はGPUでmodel.fitするほうが遅くてしょうがないです multiprocessing同様に簡単に速くする方法があれば教えてください
>>352 fの中でカウント用の変数を持ってインクリメントする
>>353 できましたありがとう
ところで、どうしてorなんでしょう?
>>357 print(i)の戻り値がNoneだから、必ずorの右辺を返す
>>357 どうして?という直感はまっとうで
読み手の思考が止まるので必ず成功・失敗するケースだとその用法は不適
書き捨て用
>>361 なるほど、かしこいですね
>>362 では、どのような書き方が適切なのか教えてください
printしたらforと内包表記の違いなんて誤差に見えるほど遅くなると思うがそれはええんか?
forと内包表記で速さに違いが出るのはなぜですか? 同じコードをなぜ生成しないんですか?
内包表記でプログレス挟んで遅いのは嫌とかバカの極み 可読性考えて普通のforで回せ。 つか速度測ってみろ。大差ねえわたぶん [(f(x[i]), print(i)) for i in range(10)]
超初心者を馬鹿にしないと精神の安定が保てないかわいそうな人
馬鹿にされるような日本語使いする自称超初心者が悪い
>>351 print等の副作用を伴う処理を繰り返す場合は
内包表記ではなくforを使うのがpythonにおける暗黙の了解
値の加工生成と入出力を分けて書くのはpythonに限らずプログラミングの基本
>>363 a = [[print(i), f(x[i])][1] for i in range(10)]
カウント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秒 行儀悪い書き方だが、条件しだいで効果はある
>>365 ループ内でpythonのインタプリタで実行される処理とコンパイル済みのCのコードで実行される処理の行き来が減れば速くなる
内包表記は式しか書けないのとlist.appendのようにインタプリタがメソッドを探す処理が不要にになることが多いので単純な式評価だと内包表記がやや速い結果になりやすい
(例えばループの外でappend = outlist.appendとしてループ内ではメソッドじゃなく関数呼び出しにすれば多少速くなる)
ただforより内包表記が速いから内包表記を使うというのは使い方が間違ってるか使う言語を間違ってる
>>373 ありがとうございました。
処理系が書き方の違いを吸収して同じ(速い)コードを生成することは難しいのでしょうか?
8秒の方はstr()呼ばれる回数も少ないんじゃね やり直し
内包表記を配列操作以外に使うな(関数叩くな)って書いてるのeffective pythonだっけ
>>374 速いコードって、たとえば進捗吐かないとか、無駄な評価式やループしないとか、そうやって作ってくんよ
鈍重な書き方しても速いのがいいっていうなら、もう根本的にpythonは遅い言語だよ
>>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秒
>>378 str(i)呼ぶ回数は、両方 100000000 / 100 = 1000000回
結局書きづらい、読みづらくてミスしちゃうんだから 普通のforループの方が総カロリー低いと思います
>>380 printしない内包表記
a = [str(i) for i in range(100000000) if i%100 == 0]
8秒
行列プログラマーという本では、集合の表記に近い内包表記のほうが分かりやすいと書いてあります。 実際、もっぱら内包表記を使っています。
>>382 つまりprintは時間がかかってないわけだよね
で、普通のforより内包表記のほうが速い分だけ速くなってると
それは何の実験なんだい?
内包表記でもインデントしていいんですよ 可読性高めていけ
>>384 進捗を大雑把に表示したい場合、内包表記でprintするのも有りという実験
俺は開発中以外では使わんけど
完成したコードにこんなの書いてたらやだ
printは時間がかかってないのではなく回数を少なくしてる 他の人が指摘してるように、進捗を細かく表示したい場合、内包表記もforループも時間差はほぼ無くなる printはやはり時間がかかる
時間差は4秒で変わらないんじゃないの printに時間がかかるから4秒の割合が小さくなってほとんど意味ないじゃんってことでしょ
>>388 そういうことです
進捗を細かく表示したい場合、ほとんど意味ないってこと
完成状態で内包表記にprintはおすすめできない
テスト中に内包表記にprintを入れるのはお好みで
a=[] … a.append(str(i)) でなくて、 a=[0]*100000000/100 … a[i]=str(i) だとますます変わらなそう
>>377 そんな差でる?
むしろforループのほうが3~5%程度速いんだが
>>389 であれば、可読性より速度を重視する場合、内包表記にprintを入れたほうがいいということですよ
意味は4秒ぶんあるわけです
>>391 こちらは化石PCで測定したので。
誤差じゃない充分な時間差が開く程度にrangeの値を大きくしてみて
そもそも内包表記は可読性良いよ、ギュッと1行にまとまりつつも分かりやすい for文見る方がダルイわ、内包表記にできないものを仕方なくfor文にしているよ 慣れだよ慣れ、最近だと二重ループの内包表記も全然苦じゃない、美しいとさえ感じる
>>394 ですよね。集合論的な表記に似ています。
forループのほうが内包表記より速いなんてことあるの?
それこそ、内包表記で呼ぶ関数の回数をカウントして確認たいならデコレーターとかでtqdm使うようにした方が良くないかな? 内包表記の中をごちゃごちゃにするのは基本的には避けた方がいいと思うんだよな。 シンプルに書くために内包表記を使ってるのであって、Zコンビネーターとか使ってへんなことするなら普通のforとかにした方がいいよね 遊びとしては否定しないけどね
code golf で言うと 打数多い方が自慢してるような 糞な流れ もうやめませんか
>>397 に一票
こういうのこそデコレーターの出番だと思う
一行にまとめた内包表記より、インデントした内包表記の方が可読性が下がる
>>401 こんな感じ
imgur.com/a/UsKhUuD
tqdm使いたくなかったらpbarの初期化やpbar.updateの代わりにカウント変数とprintでも使っておいて
>>404 rangeの100で100回ループさせるから
tqdm_wrapperに100を渡してるんだよね?
>>405 そうそう、その辺はもっといい方法があるかもしれないが、ちょっと思いつかなかったのでそんな感じ。
回数が決まってないときは棒グラフは出せないけど1秒に何イテレーションできてるとかはわかると思う。
@tqdm_wrapper(total_count)ってできればいいんだけど、そういうのは無理なのかな?
printなしでやってもforループのほうがほんの少し内包表記より速いんだけどなぜだろう
>>408 計測結果は何秒だったの
メモリが少なくてスワップ発生してるとか?
Pythonのネット記事読んでるとAnacondaを入れてどうこう、というチュートリアルばっかりあるんだけど 肝心のAnacondaはどういう状況下で使うものなのか、説明省かれててよくわからないんだよな ライブラリとpythonのバージョンが合わないと使えないことがあるからそれを避けるため、って認識でいいの? 不具合無かったらAnacondaつかわなくていいのかな?
anacondaはAnaconda社の計算科学のための商品で学生の方など教育や学術目的、または趣味の用途であれば無償でご利用いただけます 入門書とかで使われてるのは、色々と最初から入ってるから開発やデプロイ先の環境構築を解説しなくて済むからだよ anacondaに依存しないやり方覚えた方が楽っていうか、むしろその方が必須になる
退屈なことは Python にやらせようを書いた人も同じような事言ってた
アナコンダを否定してるわけじゃないよ。素晴らしい商品ですし、選択肢の一つとして選べるのは良いことだと思います
あえて、IronPythonに手を出して茨の道をw
今Twitterなどで話題になってる仮想通貨のbotを作りたいです 年間で1億円ぐらい稼ぐには何の勉強すればいいですか?
これからのキーワードは仮想環境 anacondaもIronPythonもPyTorchも欲しい環境をコンテナ一発でドーン! ってやりたいからDocker勉強しようかと思っている
ぶっちゃけ docker の anaconda 版とか docker の 標準 python 版とか そういうので良いんだわ 解説書あっても各々インスコ時にバージョンガーとかおま環とか だるいサポートにみんな疲れたんだろ
windows10 + python3.9 では生ソケットを扱う事ができないのでしょうか import socket s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP) ソケット作成のとこでエラーがでます [WinError 10013] アクセス許可で禁じられた方法でソケットにアクセスしようとしました とエラーメッセージがでます ログインしているユーザはadministratorの権限も持っています 英語のサイトで調べるとprohibitというワードもありました 識者の方ご指導願います
421です コマンドプロンプトを管理者権限で実行する事が必要であると学びました
anacondaはまああれだけどspyderはなんか好きだ
a=[] append = a.append for i in range(30000000): ____append(i) のように、メソッドをあらかじめ変数に入れると高速化できるという情報をよく見かけるけど本当なの? 何回計測しても誤差程度の差しかなく、速くなってるのか確認できないんだけど
このくらい最適化してよと思っちゃうんだが無理なんかな?
>>425 ありがとうございます
計測方法のミスに気づきました
関数を作らず計測していたので、append = a.append のところがグローバル変数になって遅くなり、
その結果、高速化していなかったようです
これの出所は概ね公式Wikiだけど、2が全盛期に書かれた物なので
https://wiki.python.org/moin/PythonSpeed#Take_advantage_of_interpreter_optimizations 属性を検索したり、インスタンスを紐付けてバウンドメソッドを返す様な
https://docs.python.org/ja/3.7/howto/descriptor.html#invoking-descriptors こういった機構を回避するので多少速くなるけど、現行のPythonでは比較的小さい
ローカル変数がグローバル変数より読み書きが速いのも実際そう
>>426 型がないダックタイピングな以上は都度解決するしかないであろうなぁ…
anaconda入れたけど、avastがなぜかウイルス扱いしていて、anaconda立ち上げるとすぐ落ちて使えなくて、あきらめてvscにした
pythonで質問なんですがコンソールに表示される数値の横に量を表したバーを表示させたいのですが 300 ■■■ 20 ■ 150 ■■ ぐぐっても進捗率をあらわすプログレスバーのtqdmが出てきてしまいどうやって数字に連動した量を表示させるのかわかりません 何かヒントがあればお願いします
pbar.update(1) ←これの数字をいじる
>>431 ありがとうございます、おかげさまでなんとかできそうです
素敵なお方だ
>>432 「tqdmが出てきてしまい」て書いてるので、静的に表示するだけだからtqdmは使いたくないのかと思った
静的に表示したい人用おもちゃ
def print_bar(n, max, expansion):
____box = "▏▎▍▌▋▊▉█"
____rate = (n * expansion * 100) // max
____bar = "" + box[7] * (rate//8) + box[rate%8]
____print(bar)
print_bar(50, 100, 1)
print_bar(55, 100, 1)
print_bar(100, 100, 1)
print_bar(100, 200, 1)
print_bar(100, 200, 3)
今書いた書いたらちゃんとテストしてない
def print_bar(n, max, expansion): ____box = "█ ▏▎▍▌▋▊▉" ____rate = (n * expansion * 100) // max ____bar = "" + box[0] * (rate//8) ____if rate%8 != 0: ________bar += box[rate%8] ____print(bar) print_bar(0, 100, 1) print_bar(1, 100, 1) print_bar(2, 100, 1) print_bar(3, 100, 1) print_bar(4, 100, 1) print_bar(5, 100, 1) print_bar(6, 100, 1) print_bar(7, 100, 1) print_bar(8, 100, 1) print_bar(50, 100, 1) print_bar(55, 100, 1) print_bar(100, 100, 1) print_bar(100, 200, 1) print_bar(100, 200, 3)
Ruby on Rails なら、VSCode, WSL2, Vagrant, Virtual Box でも出来るけど、 Python は依存モジュールが多いから、Docker が普通 自宅ではじめるDocker入門[改訂版]、浅居 尚、2021/4 この本が最も簡単
>>435 barだけだとやっぱり分かりにくいですね数字も必要だと思いました
もしくはbarの到達位置の表示が必要
>>437 値、開始位置、最大到達位置を表示しました
def print_bar(n, max, expansion):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 200) // max
____bar = "" + box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(f"{n:{len(str(max))}d} | {bar:{expansion*25}s} |\n")
print_bar(8, 100, 4)
print_bar(50, 100, 4)
print_bar(90, 100, 4)
print_bar(100, 100, 4)
PythonでAI作り始めてから電気代が2000円以上高くなった
>>439 すばらしい全部入っている! けども200とか25とかなんだろう?ああ小数点がイヤだから2倍しているのか
となったので、計算式が分かるようにした方が可読性とメンテナンス性があがると思いました
以下計算式を明示した改良版
import math
def print_bar(n, max, expansion):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = "" + box[0] * (rate//8)
____if rate%8 != 0:
________bar += box[rate%8]
____print(f"{n:{len(str(max))}d} |{bar:{math.ceil(expansion*100/8)}s}|\n")
さらに良くなった import math def print_bar(n, max=100, expansion=1): ____box = "█ ▏▎▍▌▋▊▉" ____rate = (n * expansion * 100) // max ____bar = box[0] * (rate//8) ____if rate%8 != 0: ________bar += box[rate%8] ____print(f"{n:{len(str(max))}d} |{bar:{math.ceil(expansion*100/8)}s}|\n")
やっぱりmath.ceil使ったほうがいいよな importを減らしたがる癖が抜けず2倍してしまった
最終型 import math def print_bar(n, max=100, expansion=1, *, cr=2, sep="|", prefix="", suffix="", unit=""): ____box = "█ ▏▎▍▌▋▊▉" ____rate = (n * expansion * 100) // max ____bar = box[0] * (rate//8) + box[rate%8] * bool(rate%8) ____print(f"{prefix}{n:{len(str(max))}d}{unit} {sep}{bar:{math.ceil(expansion*100/8)}s}{sep}{suffix}" + "\n"*cr, end="")
>>444 すんごーい! crの初期値は1が良いかな、それ以外は全部気に入りました
>>444 数値を非表示にするオプションつけ忘れた
>>448 そのオプション名を何にするかでセンスが問われる
num, display_num, meter, bar_value, ..etc
さあ、キミのセンスを見せてくれ!
>>450 関数や変数の命名はとても重要だよ? 端的で分かりやすくする必要がある
それが可読性やメンテナンス性をあげるわけなのだよ
プログラミングは名前付けであると言われる所以はそういうことなのだよ
今回の数値の非表示オプション名は非常に難しい、私的にはdisplay_valueがベストかな?
と考えつつも彼の意見も参考にしたいわけだ、もちろんtqdmではどうしているのかな?
と調べたりもした、tqdmではbar_formatで書式を指定できるみたいだね
その中で数値部分はpercentageという変数名のようだ
print_barはunit指定ができるわけで%表示固定ではないから、percentageは適切ではない
と考えると・・ね?難しいでしょ? 皆の意見も聞きたいじゃん!
名前は重要。 開発が終わった後でも、コードを見る事があるから プログラミングの3割の時間は、分かりやすい名前を考えること 簡潔に説明されている名前なら、 処理を詳しく見なくても理解が進むので、バグも減って高品質になる リファクタリング・メソッド化などは、Rubyist の基本
メソッドが長すぎると名付けが難しいから結局は短く作るのがいいのか? でもそれだと分割しすぎとか言われそうだし 「汎用的、抽象的」な名前がいいのか「汎用的な名前を避けて具体的」にすべきなのか
>>448 でけた! tqdmのbar_formatを採用
これで数値の表示/非表示はもちろん色々柔軟に対応できる
def print_bar(n, max=100, expansion=1, *, bar_format="{prefix}{num}{sep}{bar}{sep}{suffix}",
____________ unit="%", sep="|", prefix="", suffix="", cr=1):
____box = "█ ▏▎▍▌▋▊▉"
____rate = (n * expansion * 100) // max
____bar = box[0] * (rate//8) + box[rate%8] * bool(rate%8)
____bar = f"{bar:{math.ceil(expansion*100/8)}s}"
____num = f"{n:{len(str(max))}d}{unit}"
____print(bar_format.format(**locals()) + "\n"*cr, end="")
例えば、Ruby のモジュール関数の名前なら、 cancel_button_label_text apply_or_cancel_button インスタンスメソッド名なら、 obj.suspended? 末尾の? で、戻り値がbool 型だと表現できる
>454 print_bar.update ってできない?
>>456 tqdmのupdateみたいなことができるかってこと? クラス化すればできるよ
ああ、bar_formatとか呼び出すごとに変数指定するのはアホだよね
クラス化してインスタンス生成時にbar_format指定した方がいいよね
クラス化できたけど、関数バージョン(
>>444 )の方が好きかも
class print_bar:
____def __init__(self, max=100, num_format="{num:{max_digit}d}{unit}",
____________ bar_format="{prefix}{num_format}{sep}{bar}{sep}{suffix}",
____________ unit="%", sep="|", prefix="", suffix="", cr=1):
________self.box = "█ ▏▎▍▌▋▊▉"
________self.max = max
________self.max_digit = len(str(max))
________self.num_format = num_format
________self.bar_format = bar_format
________self.unit = unit
________self.sep = sep
________self.prefix = prefix
________self.suffix = suffix
____def update(self, num, expansion=1, cr=1):
________rate = (num * expansion * 100) // self.max
________num_format = self.num_format.format(num=num, **self.__dict__)
________bar = f"{self.box[0] * (rate//8) + self.box[rate%8] * bool(rate%8):{math.ceil(expansion*100/8)}s}"
________print(self.bar_format.format(bar=bar, **dict(self.__dict__, num_format=num_format)) + "\n"*cr, end="")
p = print_bar()
p.update(70)
日記帳で試行錯誤して、結論が出てから書き込んでください
boxサーバーに上がっているExcelやcsvのデータってpythonで読み取ることできるのでしょうか?
https://app.box.com/file/xxxxxxxxxxxxx のようなURLを指定して
ファイル内のデータを読み込みたいのですがうまくいきませんでした。
beautifulsoupでいったんダウンロードすれば?
ども、print_barの作者です。こんな短いプログラムに作者もくそもないですが・・・ 上記コードを参考させてもらい考えました。私ならこうします import math def print_bar(num, max=100, expansion=1, *, prefix="", display_num=True, unit="", sep="|", suffix="", cr=1): ____box = "█ ▏▎▍▌▋▊▉" ____rate = (num * expansion * 100) // max ____bar = f"{box[0] * (rate // 8 ) + box[rate % 8] * bool(rate % 8):{math.ceil(expansion * 100 / 8)}s}" ____num_formated = f"{num:{len(str(max))}d}" * display_num ____print(f"{prefix}{num_formated}{unit} {sep}{bar}{sep}{suffix}" + "\n"*cr, end="") display_valueのほうがわかりやすいけど長いから好きじゃない。何度も書く名前ならdisp_numに短縮するかも。 bar_formatは付けたい人が自分でつければいい 最低限の機能が付いていて、可読性・カスタマイズの容易性を考えるとこんなところでしょうか
>>462 formattedです。恥ずかしいミス
なんか昨日のアップデートでWindows TerminalがIME勝手にON(英字入力)になる。とっても面倒くさい。 OFFにする方法ない?
>>462 おつかれちゃーん、なかなか楽しめたし勉強になったわ
日記帳とか言ってる奴等も参加すれば良かったのに、実際にコード書かないと勉強にならないぞっ!w
コード出してあれこれやるのはいいと思うけどここまで引っ張るのはさすがにスレチだわな
こっちへ行けよ
Pythonのお勉強 Part67
http://2chb.net/r/tech/1653540315/ >>467 引っ張るとスレチって意味が分からんw そっちのスレも同じじゃん何が違うのよ?
うーん、、もしかして自分が質問したレスが埋もれちゃったとか?
それは関係ないよ、単に答えられるor答える人が居なかっただけで我々のせいではない
自演で自分のレス褒めてるレスとか観ると 他人事乍ら哀しくなるな
>>468 スレタイも読めないのか?
ここは超初心者用な
>>430 はスレタイに沿ってるけどその後print_bar でグダグダ書くのは違うだろ
スレタイに日記帳って書いてあるスレで試行錯誤すべきだったよな
>>471 うん?
>>433 からすでにスレチってこと?
コード出してあれこれは良いとか
>>467 に書いてるし
何が言いたいのか意味が分からん、どこからスレチなのかレス番号かけや
>>473 スレチかどうかの閾値なんて人によって違うからここからスレチなんて言うことはできない
それでも「ここまで引っ張ったら」多くの人がスレチって感じるだろって話
>>475 ほえぇぇぇぇえぇぇええええええええ〜〜〜〜〜〜〜〜!!
ボクちゃんが気に食わなかったからスレチですってことですかぁああああ???
びっくりしましたぁぁああああああwwww
3回までよくて4回目がだめなんてことはない 3回でだめな人もいるし、4回はアウトだろうという人もいる だが10回までくるとさすがに全員がアウトと感じる そういう状況
>>477 うん?10回は全然良いよ、っていうかスレに沿っているなら何回でもええがな
全員がアウトと感じるとかウソつくなよw 君たちのお気持ちの表明がまさにスレチw
なぜならPythonと全く関係ございません!これが完璧なスレチの指摘というものだよ
お気持ちとか何だよww 脳みそ付いてんのか?w
>>476 > ボクちゃんが気に食わなかったからスレチですってことですかぁああああ???
ダメな理由は前に書いてあるだろ...
> スレタイも読めないのか?
> ここは超初心者用な
> びっくりしましたぁぁああああああwwww
お前の無能さにこっちがびっくりだよw
>>478 そう、君たち、この言葉がすべて
おまえだけだよいいと思ってんのは
>>479 ダメな理由は
>>475 に書いてあんだろ、スレに沿っていたけど途中で彼の閾値を超えたんだってww
10回はダメでちゅ〜〜ww
>>480 はい、じゃあ全員じゃないね、答え合わせありがとうw
>>460 460です。beautifulsoupも初めて聞いたレベルなのですが、
チャレンジさせていただきます。
ありがとうございました。
>>461 460です。beautifulsoupも初めて聞いたレベルなのですが、
チャレンジさせていただきます。
ありがとうございました。
>>482 そうだね
一人だけ空気読めないやつがいる
これが正確な言い方
今日の様に暑いとID:lkZCuVJ2みたいな奴が犯罪にはしらないか心配になるw
462です。 スレ見なおしたけど反省するようなレスしていない 449で予想外のツッコミ受けて驚いたが。 自治厨の相手はしたくないので、この件のコメントはこれが最初で最後
絶望的に適性ないやつがいるな そんな無駄なことは今すぐやめろ 限りある人生をもっと有意義なことに使え
まあ反省できるようなやつだったら最初からこんなことしないわな
コード出して色々言うのはいいけど適切なスレでやってねって話なんだけど自治厨とか言い出してる時点で反省なんてしてないわなw
>>460 例えばRuby では、input.csv が以下の内容として、
a
b,c
require 'csv'
require 'open-uri'
url = "
http://localhost:8000/input.csv" ;
CSV.parse( open( url ).string ).each do | row | # 1行ずつ処理する
p row
end
出力
["a"]
["b", "c"]
または、curl コマンドを使う事もできる。
input_csv = `curl #{ url }`
1.適性がない、というその適性を定義してください。 2.適性がない、となぜ判断したのか 1. をもとに詳しく記述してください 3.1.2.が出来ないのではないのならば、あなたこそ、あなたのいう適性をもちあわせていない、と私は判断します 以上
>>497 非論理的だね
著しく論理的思考能力の低い人はプログラミングの適性がないと言われても仕方ない
>>498 1.自民党と統一教会の関係を説明してください
2.公明党と政教分離の関係を説明してください
3.おまえは馬鹿
プログラミングしてると、 Delete、Enter、BackSpace、半角全角、home、end ここらへんがホームポジションから遠すぎて困るな 半角、全角は無変換と変換に割り当てたんだけど みんなはキーマップカスタマイズとかしてるの?
>>502 ctrl<->capsの入れ替えくらい
>>502 親指活用できるエルゴノミクスキーボード使ってる
詳しくはハードウェア板のエルゴノミクスキーボードスレへ
kinesis, ergodox, teckあたりかねその辺打ちやすいの
スクレイピングの練習中でリスト内包表記とre.search()について教えてください
seleniumとlxmlで取得したデータの変換がうまく行かないです
url_list = ['
https://www.tekitou'+re.search (r'[^0-9A-Z]dp[^0-9A-Z]([0-9A-Z]{10})([^0-9A-Z]|$)',a.get('href')).group() for a in html.cssselect('#tekitou > div > div > a:nth-child(1)')]
html.cssselect('#tekitou > div > div > a:nth-child(1)').get('href')の時点で取得できてるurlは下記のような感じです。
https://www.tekitou/% 〇〇%〇〇/dp/(10桁の英数字 英は半角大文字)/ref=zg_bs_10桁の数字_2桁の数字/3桁の数字-7桁の数字-7桁の数字?pd_rd_i=(10桁の英数字 英は半角大文字)&psc=1
https://www.tekitou/music/player/ref=zg_bs_10 桁の数字_2桁の数字/3桁の数字-7桁の数字-7桁の数字?pd_rd_i=(10桁の英数字 英は半角大文字)&psc=1
re.search().group()する前のurlが/dp/ありのurlと/dp/なしのurlに分かれるのですが、
re.search(r'[^0-9A-Z]dp[^0-9A-Z]([0-9A-Z]{10})([^0-9A-Z]|$)',a.get('href')).group()の作業の際にエラーがでてしまうため
/dp/なしのurlを削除するようにするか、
pd_rd_i=(10桁の英数字 英は半角大文字)&psc=1の(10桁の英数字 英は半角大文字)を取得するようにしたいです。
なにかうまい表記があれば教えてください
アマゾンのURLくらいググったら色々出てきそうだけどクソ見にくい正規表現で無理せずにスラッシュでsplitでifにlengthとアスキー確認くらいでいいんじゃないの?
プログラミングって直感じゃね? 論理は直感を説明するのに用いることに有効だけど プログラム書くのにいちいち考えないっしょ 考えるのは設計とテストだけだし
>>509 pd_rd_iから取得
url_list = ['
https://www.tekitou/dp/ {0}/'.format(re.findall(r'\?pd_rd_i=(\w+)', a.get('href'))[0]) for a in html.cssselect('#tekitou > div > div > a:nth-child(1)')]
argparse使って、たとえば1つ目の位置引数(スイッチのようなもの)の違いで、それ以降は全く異なる引数ルールになるような場合はどのような指定をすればよいでしょうか? それともそれぞれ別のルールを定義してパースする必要がありますか? すごく簡単な例ですが、addの場合とlistの場合で指定する引数が違うようなものとか user.py -add name [--prop property] -list [--group group]
>>515 1つめの位置引数を読んでから残りをargparseにかければいいんでないの?
それかサブコマンド対応してるライブラリを使うか
>>516 なるほど。argparseで一度にまとめてできればと思ったんですが、できないってことですね…
>>509 例えば、Ruby なら、
URI.split で、URL のパス部分だけを抜き出して、
その文字列内に、/dp/ が含まれているかで条件分岐する
require 'uri'
dp_url = "
http://example.com/%E3%81%82/dp/a" ; # あ = %E3%81%82
non_dp_url = "
http://example.com/%E3%81%82/a" ;
p dp_ary = URI.split( dp_url )
p non_dp_ary = URI.split( non_dp_url )
#=> ["http", nil, "example.com", nil, nil, "/%E3%81%82/dp/a", nil, nil, nil]
#=> ["http", nil, "example.com", nil, nil, "/%E3%81%82/a", nil, nil, nil]
# パス部分
p dp_ary[ 5 ]
p non_dp_ary[ 5 ]
#=> "/%E3%81%82/dp/a"
#=> "/%E3%81%82/a"
p dp_ary[ 5 ].match( '/dp/' )
p non_dp_ary[ 5 ].match( '/dp/' )
#=> <MatchData "/dp/"> : 一致する
#=> nil : 一致しない
add_subparsersでやればいいんじゃない
>>512 うう……設計がプログラミングに含まれてない……うそやろ……
>>509 /dp/(10桁の英数字 英は半角大文字)があれば、その(10桁の英数字 英は半角大文字)を取得
?pd_rd_i=(10桁の英数字 英は半角大文字)があれば、その(10桁の英数字 英は半角大文字)を取得
どちらも無ければ空文字を返しエラーとはならない方法
url_list = ['
https://www.tekitou/dp/ {0}/'.format(re.search(r'(?<=/dp/)(\w+)|(?<=\?pd_rd_i=)(\w+)|$', a.get('href')).group()) for a in html.cssselect('#tekitou > div > div > a:nth-child(1)')]
>>520 Don't think. Feeeel!!
>>519 add_subparsers使えばできますね!
ありがとうございます。
>>520 設計は人が考えたものを具現化するプロセスまでの事でプログラミングに含まれないよね
プログラミングは優秀な言語と開発支援ツールに頼って直感のままに組み立てる作業
人が本来やることは自身の進化とソフトウエアのアップデート対応に強い設計する事と作業を減らす工夫と世界が前進することへの貢献
簡単そうに言ってるけど かなり時間かけて様々なことを知らないといけないし知らない未知のことへの挑戦もしてかなきゃいけない そーゆー志を持った人がこのスレの中に居てくれたら俺は嬉しい
docker入れてみたけどやっぱ仮想環境だからGB単位でメモリそこそこつかうんだよな アイドル状態で8GB、vscodeで1〜2GB、dockerで2GB、Chromeで動画見ながら作業したら2〜3GBぐらい使うからギリギリで困る やっぱメモリ32GBは入れないとだめか
>>514 >>521 ありがとうございます
行けました!
seleniumで複数ブラウザ立てて並列処理してみたいけど難しそう scrapyで楽天からスクレイピングしてみたら非同期処理?のせいで早すぎて速攻アク禁くらった
>>531 プロファイルを別にすればいけるよ
高速化目的で同じサイトに並列アクセスするのはやめた方がいい
流石にもういきなり逮捕はされないと思うけど、librahackみたいなことが起こらないとは言えないから怖いよねー。 アクセスログで見ても、ギリギリ人間がアクセスしてるって言い訳できるぐらいの間隔を乱数で作ってsleepしてるわ。
>>511 フハハハハハハハハ、
>>521 を刮目せよ! 賞賛の声(
>>530 )を聞け!
正規表現はクソ見にくいわけはなく、むしろ簡潔であり完璧であり完全無欠なのである
正規表現にできないことはなく、正規表現に代わるものはなし
正規表現はまさに人類の叡智なのである
イヤイヤイヤイヤ、普通にクソ見にくいでしょ。 他人が理解できないものを書くほうが偉いって風潮何とかならんの?
>>535 偉いとかじゃなくて便利なんだよ
>>521 の正規表現は別に難しい部類じゃない、\wは単語文字という意味で英数字も含まれる
\w+で単語文字が1個以上という意味になる、その前の(?<=...)は後読みアサーションで
これにマッチした後の\w+をサーチしているわけで基本というか、ちょっと勉強すれば、というか
正規表現の仕様に例が載ってるから、例みたらすぐ理解できるよ
https://docs.python.org/ja/3/library/re.html 自分的には最後の|$が工夫した点で、コレでサーチできなかった場合に空文字を取得させることができる
正規表現使わずにスラッシュでsplitでifにlengthとアスキー確認なんかの方が見にくいだろうし
面倒すぎてやっとれんよ
>>529 最新動画の@cacheがマジ感動した、最後のフィボナッチの高速化がマジ良かった
マジでマジでマジだから
WSL2, Docker は、8GB メモリじゃキツイ 16〜32GBは欲しい
>>536 スラッシュでsplitでアスキー確認って
[i for i in ○.split('/') if len(i) == 10 and i.isascii()]
で終わりでしょ
それ自体に難しさも見にくさも感じないが
正規表現学びたいけど複雑すぎて訳分かんねえよ なんか練習できるところないの? ゲームっぽく遊べたりする所どっかあるだろ?
>>540 これはアカンでしょ、ifってそんなけ? /dp/の判定が無いし
/dp/が無かった場合にpd_rd_iから取得する処理が無いし
これでいいなら正規表現ならこうじゃわいな
re.search(r'\w{10}|$', ○).group()
findall使った方がいいか、こっちの方が
>>540 と処理結果同じだわ
re.findall(r'\w{10}', ○)
10桁英数のチェックが必要ないならこれでいけるんじゃね ([i[:10] for i in url.split("/dp/") + url.split("pd_rd_i=") if not i.startswith("https:")] + [""])[0] チェック必要なら1行ではきびしいか
>>545 を抽象化+10桁チェック+isasciiチェック追加(10桁チェックは不要だとは思うけども・・)
[i[:10] for i in url.split("/dp/")[1:] or url.split("pd_rd_i=")[1:] if len(i[:10])==10 and i[:10].isascii()]
気づいたんですけどこのisascii()でのチェックはasciiのチェックであって、ascii文字のチェックじゃないから
英数字だけじゃなくて/やtabやらもTrue判定しちゃいますからダメですね
ちなみに
>>521 も10桁チェックは入っていないのですが、入れた場合は以下のようになりまして
その場合もやはり分かりやすい、可読性が良い、簡潔、何をしているかすぐ分かる
正規表現スキになっちゃったって方はgoodボタン押してください^^
re.search(r'(?<=/dp/)(\w{10})|(?<=\?pd_rd_i=)(\w{10})|$', url).group()
>>547 英数字チェック完全版+セイウチ
[x for i in url.split("/dp/")[1:] or url.split("pd_rd_i=")[1:] if len(x:=i[:10])==10 and x.isascii() and x.isalnum()]
・フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、 “テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡 ・リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、 業務委託契約の求職者と企業をマッチング ・1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の 人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現! ・『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル ・副業・兼業マッチングサービス「クラウドリンクス」登録者数2万人突破 中小企業で進む副業人材の採用、96%が継続採用を希望 ・フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の 『ものづくり・商業・サービス補助金』とは?概要や条件を解説 ・茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金 ・長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
>>552 すばらしい! これ以上は良くなりそうにないね
こうして見るとやはり正規表現の方がいい、仕様変更にもすぐ対応できるし
へ? ここで
>>552 が「実行速度では負けてないもんね!」つって速度勝負をしかけてきて
それならre.compileじゃぁあああって応戦してからの、やっぱ「速度じゃreは不利じゃわい」
つって、「いやいや、やはり正規表現さんの勝ちですわ、メンテナンス性では完敗ですもん」
ってお互いが歩み寄ってからの熱い握手で終幕やろうが! まあええわ次の話題もってこいや
ID:t+dBeaSp ID:lkZCuVJ2 ID:Tcjxae6G ID:hxnsYVU0
>>492-494 秋葉で暴走した加藤は死刑完了したそうだ
python使いやすくていいわーって思ってたけど json使ったら面倒だなと思った… これ自分で辞書にしたり戻したりしないといけないわけ? pickleちゃんはバイナリになるからやだ
>>559 あの事件で大学の同級生死んじゃったよー……。執行まで長かったなー
まじかよ 東大近いもんな 優秀な人を亡くすのは実に惜しい
while True: わーいPython便利だなー あれ?このXを扱うのってめんどくさくね? 他の言語にしよっと X以外がめんどくさすぎる!
>>560 これってどういうこと?Pythonのオブジェクトに変換せずに何かをやりたいっていうこと?
yamlの仕様を学ばないままcomposeやk8sを使ってる
パスの\を/にかえなきゃいけないのが面倒すぎるんだがなんか方法ないのか? \\にかえるのもめんどう で調べたらRつけるだけでいいらしい…… だったら最初から\読み込めるようにしろよ!
>>560 jsとpythonでしかjson使ったことないけど、どちらも使い勝手は変わらんと思うが。
>>570 その文句は、エスケープ文字を勉強したほうしたほうがいい
あといちいち手動でreplaceするよりPathlib使った方がかかいもよ
https://pystyle.info/python-pathlib/ PythonでJSONの取り扱いは、JS以外の他の言語と比べたらめちゃくちゃ楽な方だと思うけどな。ほとんどJSと変わらない。 CはともかくC++だって全然簡単じゃないからねえ。CだとPythonの5倍、C++でも2.5倍ぐらいの記述量になる気がする。
jsonはpythonのビルトインパーサーでなんとかなるな 使えないhtmlパーサーとは大違い
python に限った話じゃないけどなぜか html パーサーっこれって言う奴ないよね
>>579 htmlが、sgml/xmlを簡略化した派生で
文法があまりに自由でゆるゆるだったから、
もともとデータ処理には向いていなかったということなんだと思うよ
>>580 そうは言っても html で公開されてるデータもあるんだからねぇ
>>581 現状では、外部モジュールに頼るか、力づくでなんとかするかしかないものねw
最近はhtmlに組み込まれたjsonデータ形式(json-ld)が多くなって、
データを探るくらいならあまり悩まずにすむので助かってるわ
君ら二人が思ってるほどそういう需要がないんじゃない 結局やりたいのはスクレイピングでしょ
スクレイピングできるようなライブラリを標準ライブラリに組み込んで欲しくはないよね html.parseは確かにシンプルだとは思うけど、どこまでってなると難しい html自体がかなり緩いから、サービス依存とか流行に依存してしまうんだよね まぁ、Beautiful Soupもあるしいいじゃないすか
yieldって初めて見た ジェネレーター関数?を作るときに使うのか 正直使い道がわからんな ジェネレーターとかイテレーターとかはだいたいわかるけど
>>585 > ジェネレーターとかイテレーターとかはだいたいわかるけど
わかってたらyieldの使いどころがわからんとかないと思うが...
>>586 こういうやつって結局何聞かれても説明できないやつだよな
国債取引してればyieldなんてしょっちゅう見るけどな
教えてください。 Wordpressに記事投稿する際に閲覧パスワードをつけたい場合 ‘status’=‘publish’, ‘contents’=‘記事本文’,, ‘password’=‘閲覧パスワード, ‘tag’=1 …. と指定しています。 投稿自体は成功しているのですがパスワード付きの記事になりません。 どなたか解決策をお願いします。
>>585 リスト返すよりよりジェネレータ―の方がコスト低いからでは解決しない質問?
リスト作成のコストと比べても意味ないやろ yield使わずにジェネレーターを作ればありがたみが分かる
リストをfilter()使ってlambda式ではなく外部関数を呼び出して抽出する場合、外部関数に追加の引数を渡すことってできますか? リストの要素に加えてさらに判定用の引数を与えて外部関数で処理させたいです
>>593 部分適用した関数を用意すればできるよ
partialとか関数を返す関数を書くとかで
リストを[(要素, 追加引数)]の形にzipするのでもてきる
ただlambda使って外部関数に引数渡すのが一番よく使われてる印象
>>594 ,595
functools.partialもlmbdaもできました。ありがとうございます。
確かにlambdaのほうがすぐに書けるのと、パッと見て分かりやすいかもですね
ある変数に対してifまたはelseで値を代入するとき「未定義の可能性があります」という警告が出てしまいます。 この警告は無視して構わないのでしょうか? 実際はifかelseが必ず実行されるため、未定義になることは無いと思います。
>>597 その部分のコード書いてみ
たぶん未定義になるパターンがある
ifとelse両方で定義してあれば未定義にはならんと思うけどな 定義してないから警告出るのかね
て言うか未定義の「可能性」なんて普通の処理系ではでないだろ なんかツール使ってるならそのツールの名前書きなよ
どこかに未定義ルート有るんだ そこらへんを探すのが楽しい
Ruby では、条件分岐で初期化されるはずの変数が、 初期化されなかった場合に、nil・未定義になる if false n = 1 end p n #=> nil
翔泳社のスラスラわかるPythonを読み終えて、 次にソフトバンクのPython完全入門を買おうか迷ってるんですが、 どなたか読んだ方いましたら感想を教えて下さい よろしくお願いします
webアプリ作って内部サーバーから使ってみよう、みたいな本読んでるんだが
コマンドプロンプトに
python -m http.server --cgi 8080
と書いてwebサーバー立ち上げて
ブラウザで
ht
http://localhost:8080 開くまではできたんだ
ここから
ht
http://localhost:8080/開きたいwebアプリ.py へ移動しても、中身がテキストとして表示されるだけでwebアプリとしては機能しない
これはなにか手順間違えてるかな?
pythonコード自体は以下
https://techiedelight.com/compiler/?MN5F 呼ばれたクラスのメソッド実行やインスタンスの参照はできますでしょうか? RubyのBinding_of_caller gemのようなことをやりたいです。
>>609 例えば、Ruby では、
コンソールで、ウェブサーバー・WEBrick を起動する
ruby -run -e httpd . -p 8080
ブラウザで、
http://localhost:8080/a.html とすると、HTML が表示される
例えば、これが、
http://localhost:8080/a.csv a.csv, a.txt など、ブラウザが解釈できない拡張子の場合は、ダウンロードされる
>>609 cgi_directoriesで定義されてるディレクトリの中にあるソースコードじゃないとじっこうできないかも
>>614 csvじゃなくてcgiの話な、チンカス
>>609 /cgi-binに配置して
localhost:8080/cgi-bin/xxx.pyでアクセス
レスありがとうございます 実は最初にソフトバンクの本を買おうと思ったのですが、アマゾンレビューを見たら 少しわかりにくい箇所もある、という感想があったのでワンクッション入れました 今となっては独習Pythonなどの中級書に進んだ方がいいですか?
民明書房の「結局あんたはpythonで何がしたいの?」とか読むといい
bool([])がFalseなのに all([])がTrueになる理屈を教えてください
イテラブルの要素の探索中にFalseでリターンされなければTrueをリターンされるようにallが実装されてるから
https://github.com/satwikkansal/wtfpython#-all-true-ation- 設計思想的な話しなら分からん
数学的にそれが自然 Wikipediaの論理包含とかVacuous truthを読め
r = True for e in S: r = r and e return r S が空の場合,for文の中は1度も実行されない. 返されるのは,rの初期値であるTrue
>>624 理屈はわかりました
その実装にした人を小一時間問い詰めたい気分でいっぱいです
all([])の結果にTrueを求めるユーザーが世の中に一人でもいるのでしょうか…
>>625 数学はよくわからんのですごめんなさい
似たような例として,Sの要素の和を計算することを考える. r = 0 for e in S: r = r + e return r Sが空の場合,rの初期値である0が返される.
似たような例として,Sの要素の積を計算することを考える. r = 1 for e in S: r = r * e return r S が空の場合,返されるのはrの初期値である1
sum, prodという関数がPythonにあるのならば, sum([]) == 0 とするのが自然だし, prod([]) == 1 とするのが自然. prodのほうは不自然に感じる人がいるかもしれないが,sumが自然なのと同じ理由でprodも自然.
anyとかallは評価できるものがある場合にのみ使うべきだと思うんだ。空打ちしたら「何だこりゃ」ってなる つまり all([]) ではなくall([''])と使いたい。これなら正しく(評価がなされて)falseが返る つかall([]) ってどういう状況よ
論理包含、Vacuous truthを読めと言ってる人は理由を知っているだけで理解できていない
any([]) == False all([]) == True こうだと何が問題になるのかが分からない.
all(S)は∀x(x∈S ⇒ x==True)が真であるときに,Trueになり,偽であるとき,Falseになる. Sが空なら∀x(x∈S)は偽だから,∀x(x∈S ⇒ x==True)は真である. any(S)は∃x(x∈S and x==True)が真であるときに,Trueになり,偽であるとき,Falseになる. Sが空なら∃x(x∈S)は偽だから,∃x(x∈S and x==True)は偽である.
allとanyのあるある言いたい TrueとFalseのあるある早く言いたい
突然マザコンという単語が出てきた 普通の人はすぐに思い浮かぶ単語ではない つまり、自分がそうだとよく言われたから頭に浮かびやすいと自己紹介しているわけだ
vscでインタープリターが設定出来ずエラーになる なんでぇ…検索しても出てこない…
>>623 の疑問にバッチリ明快にお答えしましょう
all([1,2,3]) -> True
all([1,2,3]+[]) -> True
all([1,2,3]) and all([]) -> True
よって、all([]) -> True
同様にanyの場合は
any([1,2,3]) -> True
any([]+[1,2,3]) -> True
any([]) or any([1,2,3]) -> True
よって、any([]) -> False
Vacuous truthとか言われても分かんないでしょ、wiki見ても分かんない
>>638 の取って付けた数式見ても分かんない、でもコードで書くとあら不思議一目瞭然
>>645 空リストに分解するのはいいね
ただanyはFalse側で示さないといけないな
1. [True, True] 2. [True, False] 3. [False, False] 4. [] この4つから 1種類だけ処理したい場合と2種類だけ処理したい場合を all, any, notで各listにつき1回走査するだけで書けるかどうか もしall([])がFalseだとしたらどうか
>>647 配列例を一緒にしようとしたんだけど、こっちの方が分かりやすいか
any([0,0,0]) -> False
any([0,0,0]+[]) -> False
any([0,0,0]) or any([]) -> False
よって、any([]) -> False
こう決めてるからといって準備してあるものから答えを持ってくるのではない あくまでデジタル計算の答えがそうなっているだけ それをわかってないみたいね
ID:VBdofYjo ルビーガイジと別のベクトルで頭おかしいね
単なる慣習でしかなくて合理的な理由はない プログラミングではall([])がFalseだったほうが楽になるケースの方が圧倒的に多い 残念ながらempty listだけ別途チェックするのが無難
all()は論理積のロジックなので初期値True any()は論理和のロジックなので初期値False そうしないと成り立たない
ドキュメントのallの説明で、(or if the iterable is empty)が加えられたのは2009年か2010年ぐらいから
>>653 それ使う側の視点じゃなくて
内部実装上の都合でしょ?
>>655 これ以上に自然な定義はあるのか?
引数が空の時に余計な評価を挟む方がよっぽど不自然だと思うが
>>656 実装の都合上は自然かもね
使う側の視点からは全くもって自然じゃないよ
>>657 all()とany()の動作を文章にして書いてみたら分かる
関数の仕様自体が気に入らないなら自分で書くしかない
>>652 > プログラミングではall([])がFalseだったほうが楽になるケースの方が圧倒的に多い
具体的にコードで示して欲しい
まあ5×0=0で5^0=1なのも実装した人にとって自然なだけだし言いたいことはわかる
やっとバカにも理解できたようですが、
>>660 を見る限り理解できていませんw 残念
Eric Matthesの「python crash course」(和名:最短コースでゼロからしっかり学ぶpython入門)を完了して次にデータ解析をやりたいんです そこで オレイリーの「pythonによるデータ分析入門」を読んだのですがまだ私にはレベルが高いようです 橋渡しになるレベルの本はありませんでしょうか?
>>662 『Pythonによるあたらしいデータ分析の教科書』辺りで
Jupyter Notebookとか分析の基本覚えてから
『Python実践データ分析100本ノック』でデータの前処理とかを本格的に勉強してから
オライリー本読んだ方がええかもね
型ヒント(num: int = 1など)って普通に使われてますか? 私も常に使った方がいいですか?
使われてると思うし使えた方がいい PyCharmとかVSCodeで書いてると型を判断してくれるので書きやすくなるしミスも判明しやすくなる
>>653 配列の全ての要素が5以上かをチェックするcheck関数を作りました
def check(lst):
return all(i >= 5 for i in lst)
空リストが入力された場合Falseを返したいのですが
論理積のロジックなのでFalseを返すと成り立たなくなります
空リストのチェックはどうすれば良いでしょうか
def check(l): __if l: ____return all(map(lambda i: i>5, l)) __else: ____return False すべて5以上か みたいな関数名にして使う checkはダメ。論外
>>667 return bool(lst) and all(i >= 5 for i in lst)
>>668 >>669 これはいけません 論理積のロジックなので空リストが入力された場合はTrueを返す必要があります
Vacuous truthを知らないのですか? 論外です
空listはfalseなのでbool()は不要 もしくは lst or [0] とすれば空listチェック不要
>>670 ああそういうことか
667の質問の意味が今わかった
変な質問だなと思いながら適当に答えちゃった
>>670 空のリストでtrue返したいならall([i for i in lst if i>5])で返るが
>>671 bool()は不要のほうは、戻りが True,False,[]の3種類になるから個人的にいや。
lst or [0]のほうは、i >= 5 とかの場合使えなくなるからよろしくないかと。
>>674 訂正
lst or [0]のほうは、i >= 0 とかの場合使えなくなるからよろしくないかと。
>>668 配列じゃなくiterableだと詰むよ
>>672 そうなんッス
>>667 のcheck関数は完璧ッス 論理積のロジックでVacuous truthで数学的に自然なんッス
check(a+b+c) と check(a) and check(b) and check(c) が等価になると理解できるッス
でも空リストは弾きたいじゃないッスか しかし空リストの場合にFalseで返すと数学的に不完全になるッス
つまり空リストを弾きたいならcheck関数外の前後どちらかで引数のチェック処理が必要というわけッス
メッチャ不便じゃないッスか これが
>>659 の回答ッス
メッチャ不便なんで数学的に不完全な
>>668-669 のようなコードになるッス これが自然ッス
でもその場合 check(a) and check(b) and check(c) みたいな使い方はできなくなるッスよね 空リストが来たらアウトッスから
つーわけでどっちもOKな解決策はあるのかなという質問ッス
同じようなcheck関数を書く場合に空リストの扱いはどうするのかって話ッス
もしそれが
>>668-669 のようなコードになるのならオイラの勝ちということッス
もちろんall([])がTrueになる理由は理解してるッスよ 5×0=0で5^0=1ってことッスもんね 分かってるッス そこは大丈夫ッス
>>676 要件は配列の要素をチェックする関数の作成だけど。
>>677 そもそも数学的な計算がしたいとき、空のリストが来たら不自然になる って
そりゃ空のリストは数学的じゃねーんだから不自然になって当然だろ
空のリストとかいう非数学を数学化する関数を実装しろよ。それはお前の好きにしろ
そういえばBytesIOがイテレーターなのはなんでなの? 配列じゃあかんのか?
>>677 全然意味わからん
空リストを弾きたいならcheckの中で例外発生させるなりすればいいだけじゃねーの?
>>681 こいつはネチョネチョ言葉遊びしたいだけのゴミ野郎だから無視でいいよ
上の方でも暴れとる。rubyキチガイと同列の泥人形
どうせ発生しないような例外的なやつの対応ばかり考えている無能
>>678 all([]) == Trueはデメリットが大きい例として
>>667 が書かれてるという文脈を理解してから書いてね
all([]) == True any([]) == False であると困る例を教えてください.
>>685 それ all([ ]) = False でも何も解決しないだろw
True / False しか返せないのに空リストかどうかの情報欲しいなら別の方法で返すしかない
実は空リストの場合Noneを返すという手を考えたッスけど 数学的完全性を保つことはできなかったッス しかしたった今思いついたッス 空リストの場合は2を返せばいいッス 2はTrueッス 我ながら自分の才能が恐ろしいッス
>>689 訂正するッス 2じゃなくて1.0を返せばいいッス 空リストの場合は1.0を返すッス
1.0なら check(a+b+c) == (check(a) and check(b) and check(c)) が成立するッス
それで最初に言ってた > 空リストが入力された場合Falseを返したいのですが これは満たせるの?
>>691 ・・・満たせないッスね 判別ができるようになるだけで その判別方法もrepr()=='True'とかで煩雑 だめッスね
>>690 1.0が返ってくると
if check(lst) == 1.0: と if check(lst) == True: のどちらもTrueになるけど
if type(check(lst)) == float: で判定するの?
副作用は少ないけど美しくない
1.0じゃなくて1のほうがさらに副作用なくていいとおもうけどね
元になってる数学の考え方自体の限界 使う側がバグらないよう注意するしかない python特有の問題じゃないのが救い
>>693 美しくないッスね そもそも空リストチェックは言うほど不便じゃないッスよね
if lst and check(lst): ってするだけッスもんね
オイラの中で結論が出たッス やはりallにならってcheck関数も空リストのときはTrueを返すべきッス
必要に応じて空リストチェック( lst and check(lst) )をする こんだけッス シンプルで美しいッス
ビギナーズトラップかもしれないけどそんなの知らないッス
初心者すぎて、これでいいのか分からんけど boolとandあたりをオーバーライドしたクラスを返却するとか? 空リストかどうかの情報まで持たせたクラス って、最初の仕様を捻じ曲げていいのか・・・
超初心者なんですが、 社内LANの共有ストレージ内のExcelファイルを操作して作業自動化をしたいと思っています。 社用PCへのインストール申請が面倒なのでGoogle Colabでやってみたら、ストレージ内のファイルが読めないということで渋々インストール申請しようとしているところです。 JupyterLab Desktopで社内LANの共有ストレージのファイルは操作できますか? 環境構築から躓いてます…
浮動小数点数を==比較すると言うとヒステリックな反応する奴いるよな
>>666 レスが遅くなってしまってすいません
ありがとうございました
なるべく使っていこうと思います
>>697 インストール申請いる会社だとpythonは厳しい
外部ライブラリをいくつもインストールすることになるから、そのたびに申請申請…
>>697 環境はWindowsだと思うが元からあるExcel VBA、VBScript、PowerShellあたりでできないか考えた方がいいかと
>>697 インストール申請云々の縛りあるなら普通にVBAでやれよ
インストール申請あるところならVBA/VBS禁止とかありそうだけどな
大半のライブラリはインストールじゃなくダウンロード
pythonのパッケージ管理ってどうやってる? 初心者だから本とかウェブ記事とか読みながらそのまま適当にpipしてたんだけど このままだとめんどくさいことになりそうな気がしてきた
poetryで作った環境にインストールしてグローバルに使いたい奴だけリンク張ってる poetry使ってるのはライブラリ開発するのに使ってるついで 環境分けたいだけならvenvそのまま使えばいい
プログラミングなんて大してSSDの容量使わねーだろ、と思ってたらanacondaが10GBぐらい使ってきて泣いた
pyinstallerで.pyファイルのexe化を試みています。 opencvがエラーを吐いて正常に動作しません。 ImportError: ERROR: recursion is detected during loading of "cv2" binary extensions. Check OpenCV installation. google検索してやったこと。 paths=でモジュールの場所を指定 opencvのバージョンを4.5.3.56まで落とす(インストールエラー) python: 3.10.6 altgraph==0.17.2 future==0.18.2 numpy==1.23.1 opencv-python==4.6.0.66 pefile==2022.5.30 Pillow==9.2.0 pillow-avif-plugin==1.2.2 pyinstaller==5.3 pyinstaller-hooks-contrib==2022.8 pywin32-ctypes==0.2.0 Send2Trash==1.8.0
>>710 opencv-python-headless
>>710 レスありがとうございます。
nuitka、使ってみました。やはりopencv周りは色々問題があるようです。うまく動作しませんでした。
>>713 レスありがとうございます。
opencv-python の代わりに opencv-python-headless を使ってみましたが、全く同じエラーでした。
やはり opencv は難しいのでしょうか…
GoogleはGoなんて作る暇があったらPythonコンパイラを作るべきだった
impor requests ってやると Library stubs not installed for "requests" (or incompatible with python 3.9) とでてくるんだが リクエスト "用のライブラリスタブがインストールされていない(またはpython 3.9と非互換)。 よくわからん
結局、ネット上で実績ありそうな、 Python 3.8.5 altgraph==0.17.2 future==0.18.2 numpy==1.23.1 opencv-python-headless==4.5.3.56 pefile==2022.5.30 Pillow==9.2.0 pillow-avif-plugin==1.2.2 pyinstaller==5.3 pyinstaller-hooks-contrib==2022.8 pywin32-ctypes==0.2.0 Send2Trash==1.8.0 で実行ファイルからエラーが消えたようです。 アドバイスくださった方、どうもありがとうございました。 バージョン管理って大変ですね。
>>718 何使ってるか知らんがmypyが有効になってるんじゃないの?
ディレクトリがcase-sensitiveかどうか調べる方法ありますか? 環境はWindows10です やり方がわからないので対象のディレクトリ内にcase-sensitiveなディレクトリ名やファイル名が存在するか調べることでなんとかしようとしたけど pathlibのglobではcase-sensitiveなディレクトリ名やファイル名では読み抜け発生 os.walkならいけるかもと思い実験中
>>724 最近のWindowsもフォルダ毎にCase Sensitiveかどうかを設定出来るんですよ
対象のパスの下のサブディレクトリも個別に調べなきゃいけない
pylintというのを知った 俺の作ったコード pylintしたら4点だった きびしすぎん?
pip installでインストールしたモジュールがどのフォルダ(ディレクトリ)に 入ってるか確認する方法ってありませんか? エクスプローラーで見てもありません…
隠しファイル、隠しフォルダー、および隠しドライブを表示する
>>728 __file__ でわかる。
例えばopencvなら
>import cv2
>print(cv2.__file__)
答えてくれた方、ありがとうございました pip show requests を実行したらパスが表示されました pythonの処理系があるフォルダの近くにあるみたいなんですが、 VSCodeのどのフォルダにいる状態でインストールしても、 インストールされる場所は同じなんでしょうか?
class A(text:str, value:int) class B(A) VSCodeだとマウスオーバーで引数が確認できますが 上記のような継承があるとき b = B() マウスオーバーでAの引数を確認したいのですが、どうすればいいですか?
>>733 >class A(text:str, value:int)
今ってこんな定義方法があるの?
__init__か? クラスBでオーバーライドしてなきゃAの引数が表示される
素で間違えた
いまこうです
Bじゃなくて継承元のAの引数が見たいです
vscodeはpylanceですね
>>710 specファイルに、
pathex=['C:\........\site-packages\\cv2']
(パスは環境次第)
とcv2のフルパス入れてますか?
numpy配列をopencvで扱う画像にする時って cv2.imdecodeとnumpy.reshapeの二通りのやり方があるみたいだけどどう使い分けるんです?
2003年 当時荒れていたdelphiスレッドの緊急避難先で作った「くだすれDelphi 」 ヘッダーを各言語用に改変してPythonのスレッドが出来ていたのか・・・・ あれから20年近く・・・俺も還暦になるわけだ。 プログラム板にきたのは13年ぶり。 いつのまにか2chが5chになって ひろゆきがメジャーになってた。
>>742 はい。specファイルの pathx に入力する方法も試したのですが、同じエラーです。
その後色々組み合わせをためしているのですが、3.10系では成功したことがありません。
3.8, 3.9系では opencv のバージョン次第で正常に動作します。
あと
>>711 が教えてくださった nuitka ですが、アンチウィルスが過剰に反応するので諦めました。
ショートサーキットについてお聞きしたいです 本によるとandやorの両側には関数も取ることができ、 1 < 2 and print('right') 1 > 2 or print('right') をインタラクティブシェルで実行すると それぞれ'right'が表示されるみたいですが、釈然としません そういうものだと覚えておくしかないでしょうか?
なにがわからないの? x and y === if x then y else x x or y === if x then x else y
>>747 それ
True and print('right')
False or print('right')
と同じで両方共に print('right') の値を見ないと全体の値は確定しないから 'right' が表示されるのは当たり前
1 > 2 and print('right')
ってやればどうなる?
andは左側が真の場合、右側を評価する andは左側が偽の場合、右側を評価しない orは左側が真の場合、右側を評価しない orは左側が偽の場合、右側を評価する 左側だけで真か偽か判明してる場合は右側を評価しない
>>746 そうですね。書いてありましたね。
あとやったとすれば、
a.datas += [('習済みデータ.xml','.\\習済みデータ.xml', 'DATA'),]
※学習済みデータは「haarcascade_frontalface_default.xml」等
を記述したことと、1つのファイルにしたときに、Temporaryの実行パスを取得を工夫したことくらい…
あ、できたファイルを実行時にウィルスとして検知されるので、
pyinstallerの中のファイルの再コンパイルも必要です。
>>748-750 ありがとうございます
すいません、聞き方が悪かったです
ショートサーキットの機構については分かります
bool型を返すわけではないprint()関数が右端に「使える」ことが不可解です
print()は確かNoneを返す関数だったはず
>>752 None を bool として評価すると False になる
>>752 NoneはFalse
bool()で非ブール型もブールに変換した上で解釈される
>>755 評価時に__bool__が呼ばれます。if とかで使うと出力される。
左だとすぐに呼ばれるのに対して違うんですね理解しました
文字列の置換って translate()とreplace()のいいとこ取りの置換方法ないの? translate()は "aa"→"b" にできないんだよね? あと AAA = kansuu(AAA) BBB = kansuu(BBB) CCC = kansuu(CCC) DDD = kansuu(DDD) みたいな感じになってるときって for文で入れていく以外思いつかないんだけど、他に見やすい書き方あるかな?
>>758 文字列をmappingベースで置換したいならflashtext使うといいかも
2つ目のはAAA, BBB, CCC, DDDをコレクション(dict, list, tuple等)にする
フォルダパスとファイル名とURLを書くと画像を保存してくるコードを書いたんだけど
https://techiedelight.com/compiler/?BQkA エラーの対処はわかったんだけど、もっと別の書き方があるのではと思ってしまう
他の人はこれをどう書きますか?
バックスラッシュの代わりに、スラッシュを使う でもいい
raw文字列、joinpath、with_suffix
HTTPErrorやIOErrorのハンドリングもやったほうがいいよ
外部からの入力系は全部 try: req except: クソ するな俺は。ユーザーは信用しない あとダウンロード系も try: down except: 失敗 する。どんなわけわからんエラーくるかしらんし
外部とのやり取りは一筋縄ではいかないからねえ ついでにリトライも入れておきたい requestsには頼らずビルトインで頑張るw
わざわざtryしなくても例外が起きると止まるっしょ
>>760 Windows で、path = "C:\a\b"
みたいに、\ を使わなければならないの?
Ruby では、
path = "C:/Users/Owner/Documents/a"
みたいに、/ を使うけど
>>771 前半、バックスラッシュを使わなくてもアクセスできる。
後半、スレチ。いちいち書くな。
レスが遅くなってすいません 答えてくれた方ありがとうございました ああいった書き方もあるんだと頭の片隅に留めておきます
>>769 普通はエラー処理系にraiseするからtry節置くと思うが
なぜこの関数が作られたのかを考えながらプログラム書くとすっきりする
Enum 列挙型という概念を初めて知ったが 使い所がよくわからない
関数をローカル変数に代入するメリットって何でしょうか?
場合によるけど、処理前半でローカル変数に関数を代入しておくことで、処理後半の分岐が消えて見通しが良くなる可能性はあるかも。 何らかの理由でリネームしたかったとか?
>>779 同じコードで呼び出す関数だけ違うパターンって結構あるから
ソートとか
>>779 ループ内で毎回foo.bar()するよりも
ループの外でbar = foo.barして
ループ内ではbar()だけにすると微妙に速くなる
質問です。WindowsでColabでやってます。
1024×768のサイズの画像のみを収集したいのですが、
違うサイズの画像が入ってきます。どうすればいいですか?
>>786 設定したfiltersがcrawlに設定されていない
google_crawler.crawl(keyword='流星', filters=filters, max_num=10)
英語って本当にプログラムに適してるのか? isspace() って何かと思ったらis spaceかよ 空白ないと判別しにくいのはプログラミングにおいてどうかと思うわ
>>788 少なくともあんたはプログラムに向いてないな
>>787 ありがとうございます。早速、記入してみたのですが、
画像が収集できなくなりました!
AssertionError となりましたが、どうすればいいですか?
×(かける)じゃなくて x(エックス)じゃねーの? =1024x768 てか、コードはスクショじゃなくてコピペしてくれ
>>793 ありがとうございます。早速、修正してみたのですが、
TypeError となりました!どうすればいいですか?
コードのコピペ↓
from icrawler.builtin import GoogleImageCrawler
google_crawler = GoogleImageCrawler(storage={'root_dir': '流星フォルダ'})
filters = dict(size='=1024x768')
google_crawler.crawl(keyword='流星', filters=filters, max_num=10)
>>795 このようなエラーとなっています。
エラー↓
Exception in thread parser-001:
Traceback (most recent call last):
File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
self.run()
File "/usr/lib/python3.7/threading.py", line 870, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/lib/python3.7/dist-packages/icrawler/parser.py", line 104, in worker_exec
for task in self.parse(response, **kwargs):
TypeError: 'NoneType' object is not iterable
>>797 バグですか...ありがとうございます。
他のコード、1024×768のサイズの画像のみを収集するには、
どうすればいいですか?
めちゃ無駄だけど1024x768以外の画像は捨てちゃうぐらいしか思いつかん...
>>798 できました、min_sizeとmax_sizeも指定する必要があるみたいです
Python3.10でやりました、TypeErrorにはなりませんでした
google_crawler = GoogleImageCrawler(storage={'root_dir': '流星フォルダ'})
filters = dict(size='=1024x768')
google_crawler.crawl(keyword='流星', filters=filters, max_num=10, min_size=(1024, 768), max_size=(1024, 768))
>>800 ありがとうございます。早速、試してみましたが、
バージョン違いのためかNameError となりました。
現在、Python 3.9.12 のバージョンなのですが、
ColabでPython3.10にするにはどうすればいいですか?
バージョン違いって断定してるんだからそれでいいだろ 他の可能性を検討しようとするなよ
そんな能力あるのになんでColabのバージョンは変えられないの?
>>801 Python 3.9.7が残っていたからicrawlerインストールして
>>800 実行したら
問題無くできたのでPython3.9.12でもできるハズ
Colabが悪いのではないでしょうか?
windowsの3.9.13でも問題ないな ちゃんとgoogleの検索結果取得できてないか、htmlパースに使ってるbeautifulsoup4かlxmlがおかしいかかな
>>801 まさかだけどNameErrorって、NameError: name 'GoogleImageCrawler' is not defined じゃないよね?
>>800 の前にfrom icrawler.builtin import GoogleImageCrawler してるよね?
>>807 ありがとうございます。早速、試してみましたが、
見事に解決しました。
>>800 改めてありがとうございます。
お陰さまで、1024×768のサイズの画像のみを収集することができるようになりました。
>>807 せめて
>>794 ぐらいは見てから書きなよ...
まあエラーのコピペ待ちでいいかと
>>808 えっ、まじで
>>807 だったの?...
jupyternotebookでセル内のコードが長くなるため, defで定義した関数を同一ディレクトリ内のmy_func.pyに保存し メインのコードmain.py 内でimportすることにしました. my_func.pyに保存した関数内では,numpyを使っているのですが,numpyが認識されません. main.py でnumpyをインポートしていますが,その効果をmy_func.py内に待避した関数に及ばせるためには どうすればよいでしょうか.
>>813 ありがとうございます。早速、記入してみたのですが、
my_func.pyでnumpyが認識されました。
main.py内にインポートしているnumpyどうすればいいですか?
main.pyでnumpyを使っていなければいらない
そのライブラリを直接呼ぶコードがあるファイル毎にimportする。直接呼ばないなら不要 main.py __import funcs __funcs.test() funcs.py __import numpy __def test(): ____print(numpy.random.randint(0, 10))
>>815 >>816 ありがとうございます。早速、試してみましたが、
見事に解決しました。
普通、FunctionalをFucって略すか? 幻塔というゲームのテスト用のサーバーネームが JP Fuc Test Server だったらしく炎上してた
mypyでエラーにならないように pathlib.Path の型を示したいんだが、これはどうすりゃいいのかね? type()でチェックすると <class 'pathlib.WindowsPath'> となるんだが pathlib.WindowsPath と指定してもエラー出るし
動的な基底クラスはmypyでチェックできないって言ってる人がいたわ そういうことなのか?
pylanceだとpathlib.Pathでいけるけどmypyあかんか?
pythonでcuda使いたいが、お勧めのサイトありますか? ちなみにcudaは3090とかの方がいいですか?
Noneの比較はis を使うべきで==を使うべき"でない"なんて記述を見かけるのですが、 if dictData.get('key') == 'hogehoge': __echo 'OK' 例として辞書のgetメソッドのようにキーが無ければNoneを返すような場合で上記のような判定もすべき"でない"のでしょうか? この場合dictData.get('key', '')のように、キーが見つからない場合の値を明示的に書くべき? (ただdict.get()のようにコントロールできないのもありますよね)
if hoge is None: こんな風に定数Noneと比較する場合の話だよ
Noneを==すると稀にNone==None ->Falseあるから避けよう。バグのもと。これはググれば解説あるから読んで で、普通は if dic.get('key') == 'foo': __func() だけでしょう。あればする、なければ終わり if dic.get('key') == 'foo': __func() else: __func_b() でもいいけど。 基本的にNoneやFalseを判定しにいかない。まずTrue判定をして、その反対をelse (if)で受ける ただまあNone / Falseだけを知りたい場合があって そのときは if dic.get('key') is None: __func() などと書く。英文として読みやすいからよい つか辞書から無い可能性あるkeyのgetは避けたい db検索的に書きたいならget使わずtry節書いてKeyError専用処理作ろう
>>827 ,828
なるほど、明示的にNoneであることの比較の場合はということですね。ありがとうございます。
>>828 さんの最後の件も承知しました。
>>828 あ、やっぱりすみません、最後のget使うべきでない理由って簡単に教えていただけますか?
今回、API等の応答で、辞書の目的のキーがあったりなかったりするような応答で、キーがあれば拾う、無ければ無視、という単純なものなのですが、それでもgetは使わないほうが良かったりしますか?
>>830 dict['key']が存在してvalueがNoneの場合にTrueになっちゃうから、キーの不存在判定だけしたいなら'key' in dictの方がいいんじゃないかな
>>830 エラーは出ていいんよ
逆に握りつぶしちゃいけない
というかgetってなんのためにあるんだ?
try:
__dic[input()]:
____print('ある')
except KeyError:
__print('ねえわ')
except Exception as e:
__print(e.__class__.__name__)
外部入力受け付けるのって鬼門なんでこういう感じで書きたい
keyerrorは想定できるし、別の意図してないエラーも拾いたいだしょ
>>833 しつれい
try:
dic[input()]
print(1)
>>830 その用途なら、getでもいいんじゃない?
>>832 が言う様な違いはあるけれど、キーが不存在でNoneが返る場合と、キーが存在するが値がNoneの場合とを、区別する必要があるかどうか、考えて決めれば良いよ
キーに階層があって、途中のキーがなかったりすることがある場合なんかだと、 区別する実益はあるかもしれんね 一応、.get('key', {}) なんて方法もあるけど
>>832 失礼しました。最初の例ですとおっしゃるとおりですね。内容まで取得するケースも想定してました。
>>833-835 ありがとうございます。要件などふまえ考えてみます
ああわかった db['key1': 0, 'key2':0,,,] if key1: __print('ある') else: __print('ない') こんときgetじゃないといかんのだな あるいは try: __value = db[a''] __print('ある') except KeyError: __print('ない') except: __print('未定義エラー')
Ruby の偽は、nil, false だけ。 これ以外は真 でも、Python, PHP, JavaScript などは、 各型に偽値がある。空文字列・空配列・空辞書など だから、とんでもなくバグるし難しい。 すべての型の可能性を考えないといけない 文字列型・配列型・辞書型ならとか。 だから、TypeScript みたいな型チェックツールが作られた
>>841 dict['key'] = value
と
dict.get('key') = value
取得したvalueがFalseになるとき、つまり0とかNoneとか空白のとき
if dict['key'] is not True になる。値はあるにも関わらず
一方
if dict.get('key') is Ture なので、期待する挙動としてはgetのが正しい
値がダミー(0など)の辞書の用意とかありうるので
ああそういうことか re.matchとかre.searchみたいなことをやりたいのか 辞書のキーがあるかないかbooleanの判定と値への処理は別の方がいいと思う if 'key' in dでもKeyError処理はどっちでもいいけど
>>842 keyに対するvalueが0やNoneの時に
dict.get(key) is Trueにはならんやろ
dict.get(key, [default])を使うのは
keyに対応する値がデフォルト値の場合と
keyに対応する値が無くてデフォルト値が返される場合を同じように処理したい時だけ
bool判定したいならin演算子
KeyError使うのはkeyが存在しない状況が例外的な場合
>>844 ありゃならんな
これはすまん。なんか勘違いしとった。
stackoverflow why dict.get(key) instead of dict[key]?
参照
わざわざメソッドとして用意されるほどの価値がないんだよなあ 2時代は重宝したのかな
if (val := dic.get(key)) is not None: は使うけどな
次のコードがあります h=[[[]]]*10 h[0].append([0,0]) 理想としては >[[[], [0, 0]], [[]], [[]], [[]], [[]], [[]], [[]], [[]], [[]], [[]]] となってほしいのですが、現実は >[[[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]], [[], [0, 0]]] となってしまいます どうしたら理想の形になるでしょうか?
[[[], [0, 0]] if i == 0 else [[]] for i in range(10)]
h=[[[]] for i in range(10)] h[0].append([0,0])
要件後出しまくりとか ゴールポスト移動させまくりとか チョンメンタルの香具師とは付き合いたくないな
差別主義者で今どき香具師とか使ってるジジイとか逆に誰も付き合いたくないだろ
pandas のread_excelで式が入っている箇所の値を計算値ではなく、 整形されたテキスト値の方を取りたい場合はどうしたら良いのでしょうか? 数値で6.6がテキスト値として”7”として表示されている”7”の方の値をとりたいです。
>>854 Excelファイル内のデータとしてあるのは数値の6.6だけで
文字列の7という値はデータとしてファイルには存在しないので
直接読み取るのは無理
read_excelでdtypeやconverterを指定して数値の6.6を文字列の7に変換するか
一旦dfに読んでから変換するか
0.00000001から10000.xxxxくらいまで取り得るfloatの変数を、数字の表記で文字列に変えたいのですが、 str()だと、0.0001未満の値が"1e-05"のような指数表記になってしまいます 一方f-string(format)だと、".8f"等で全桁表記はできますが、小数点以下が常に8桁で0で埋められてしまいます (例 0.00001→0.00001000) 末尾には余計なゼロは付けず、かつ指数表記にならない形でfloatを文字列にする簡単な方法はありますか? rstrip('0')など使って余計なゼロを処理するしかないでしょうか?(この場合、100.0などのゼロは削除できないので判定が必要そうで単純にはいかなそうですが)
>>856 numpy.format_float_positional
ググったらすぐ出て来た
>>855 ありがとうございます。やはりできないのですね。
オプション探してみましたがそれらしいものがなかったので。
場所ごとに与えられた式が同じとは限らないので、
エクセル側で読み込み用の文字列を作成することにしました。
条件分岐について質問です
3の倍数であるかどうかを判定する関数func1()とfunc2()を書いたのですが、
どちらの書き方のほうが良いでしょうか?
https://paiza.io/projects/mbEoYGp5wy7cU2oqpoTLbA >>859 3の倍数が例外的な事象と言う事を表現したいならワンチャン2の可能性もあるかも
回答ありがとうございます なぜfunc2()の書き方はあまり良くないのでしょうか? よろしければ理由も教えて貰えるとありがたいです
すべてのnumは3の倍数かそうでないかのどちらかである、つまり必ずどちらかの処理が実行される事が一目で理解できる点ではfunc1がベター 一方で3の倍数の時は処理を行わず早期リターン、3の倍数でない時は長い処理を行う、といった場合はfunc2
いや、return入れるならelseのときもreturnしろよ 両方入ってるなら2でもいいと思うけど、片方だけ終わらせるために入れるなら関数なのかサブルーチンなのかわからんからダメだろ
>>863 なのでこの場合はfunc1()なんですね
ありがとうございました
>>864 コードはなるべく短い方がいいと思ったので使わなくて済むところでは使いませんでした
関数なのかサブルーチンなのか分からないと駄目とはどういうことですか?
こっちのが好き def is_multiple(num): return num%3 == 0
>>867 判定処理と判定結果を表示する処理を分離しましょうという意味では同意する
けどis_multipleという関数名で3の倍数かどうか判定されるのは違和感しかない
じゃどういう名前にするのがいいかと考えると判定処理をわざわざ関数化するほどではないんじゃないかという気がする
def b_is_multiple_of_a(a: int, b:int): return bool(b % a == 0) if b_is_multiple_of_a(a=5, b=10): __print('可読性低すぎる')
def func3(n): p = 0 while n > 0: p += n % 10 n //= 10 return not (p % 3)
a = [1,2,3,4,5] b = [2,3,4,5,6] c = [] for i in range(5): c.append(a[i] + 2*b[i]) こういうのをリスト内包表記で書くのは無理でしょうか
aとbの要素数が同じだったら[i+2*j for i,j in zip(a,b)]でいけね?
c=[x+2*y for x,y in zip(a,b)]
普通にrangeでも c=[a[i]+b[i] in i for range(5)]でできるかな
どうでもいいけど c = [i + (j * 2) for i, j in zip(a, b)] と書きたいな俺は # (1*i) + (2*j) のようなときのみ(2*j)でも可 # 計算スタックは()でくくる 初心者のうちは特に気をつけたい。動けばいいやんは動かなくなる原因になる
>>876 好きなのを選び多摩へ
c = [(a+1) + (b+2)*2 for a,b in enumerate([i for i in range(5)])]
c = [(a+1) + b*2 for a,b in enumerate([i for i in range(2, 7)])]
c = [a + 2*b for a,b in zip([i for i in range(1,6)],[j for j in range(2,7)])]
def main(argv: Sequence[str]) -> None: ↑ これってどういう意味というか、なにがやりたいんですか? def main(argv): ならmainにargvを渡すだけで分かりやすいんですが
>>883 型ヒントっていうヤツでしょ
おじさんはもう新しいこと覚える気力ないから
どういう機能かは自分でググってくれ
>>883 argvの型がstrのシーケンスで戻り値の型がNoneってこと
シーケンスはlistやtupleのように長さが事前に分かってて各要素にインデックスで直接アクセスできるようなコレクションの総称
そこまで型ゴリゴリにするならpythonじゃなくても(じゃない方がむしろ)良いと思うから 放置してる
>>884 型ヒントでググりました
注釈だそうですね
要するにいらないんじゃないか!
型ヒント(と開発環境)があると作業効率がずっと上がる
型ヒントのない世界は無
オジジでもない限り、初学者は型ヒントつけるクセつけてったほうが
大きいコード書くようになったときなんかに助かるで
実際使ってみると、版画リアンはものすごく楽。 名前というものは被るように出来てるものらしい。 とはいえ推奨はしない。
Pythonでローカルサーバーを立ててhtmlの確認をしたいのですが、SSIを使いたいため、以下のスクリプトを使用しています。
https://github.com/danvk/ssi-server/blob/master/ssi_server.py GITからクローニングして、MacOS + python 3.10.5で動作確認させたところ問題なく動きました。
Windows10 + Python 3.10.5で実行すると、localhostへのアクセス時に文末のエラーが出て動きません。
同一のクラウド上のファイルを参照して実行しています。GITからはMacで落としましたが、改めてwindowsで落としても同じでした。
MacOSでは動いているのでWindowsの環境なのかと思いつつ、何が原因かわからずにいます。
アドバイスください。
------エラー文章--------
Exception occurred during processing of request from ('::1', 58693, 0, 0)
Traceback (most recent call last):
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\socketserver.py", line 683, in process_request_thread
self.finish_request(request, client_address)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\socketserver.py", line 360, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Users\UserName\iCloudDrive\web\ssi_server.py", line 37, in __init__
SimpleHTTPRequestHandler.__init__(self, request, client_address, server)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\http\server.py", line 651, in __init__
super().__init__(*args, **kwargs)
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\socketserver.py", line 747, in __init__
self.handle()
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\http\server.py", line 425, in handle
self.handle_one_request()
File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\http\server.py", line 413, in handle_one_request
method()
本文長すぎの為続きは次に書きます
続きです。 File "C:\Users\UserName\iCloudDrive\web\ssi_server.py", line 40, in do_GET SimpleHTTPRequestHandler.do_GET(self) File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\http\server.py", line 655, in do_GET f = self.send_head() File "C:\Users\UserName\AppData\Local\Programs\Python\Python310\lib\http\server.py", line 679, in send_head path = self.translate_path(self.path) File "C:\Users\UserName\iCloudDrive\web\ssi_server.py", line 57, in translate_path content = ssi.InlineIncludes(fs_path, path) File "C:\Users\UserName\iCloudDrive\web\ssi.py", line 31, in InlineIncludes content = open(path).read() UnicodeDecodeError: 'cp932' codec can't decode byte 0x84 in position 1163: illegal multibyte sequence ----------------------------------------
>>888 え、上が当たり前の感覚なんだけど
昔の人は下の状況でどうやってコード書いてたの? 引数とかオプションとかメソッドとか
ソースあたったりdir連打?
>>892 たぶんこれでいけるんじゃね
content = open(path, encoding = "utf-8").read()
>>896 ありがとうございます。
まだ上手く直せていないのですが、試していたらindex.htmlに日本語があるとWindowsではエラーが出ることがわかりました。
ssi_server.py、ssi.pyで正しく日本語を読むようにすればいいということでしょうか。
>>896 ssi.pyの31行目を教えていただいたものに書き換えても駄目でした。。。
他に試してみることがあればぜひ教えてください。お願いします。
tensorflow Liteというのがあって、int8とかでTPU使うと計算が速いらしいのですが、調べても使い方が複雑すぎていまいちよくわかりません 初心者にもわかりやすくまとまってるサイトはありませんか? もしくはどなたかが簡潔にまとめていただけると助かります
どこまで分かってるか分かってないか書いたほうがいいです
>>902 converter = tensorflow.lite.TFLiteConverter.from_saved_model(export_dir)
tflite_model = converter.convert()
とすれば変換できるみたいですが、まずtensorflow.lite.TFLiteConverterがありません
私の環境ではtensorflow.python.lite.TFLiteConverterかなと思いましたが、ありません
tensorflow.lite.pythonにTFLiteConverterではなくtflite_convertがあるのを見つけました
tflite_convert.dtypes.int8というのが存在するので、これを設定すればいいのかなとは思うのですが
あと何したらいいのか見当がつきません
>>899 index.htmlは何の文字コードで保存されてるの?
Linuxで動いてるのと同じならUTF-8だと思うけど、Windows側で弄った時に文字コード変わってると
ややこしいから確認したい
>>900 でもそうだけど
ダメだった時に同じエラーが出たのか、違うエラーが出たのかははっきり書いた方が良い
エンコーディング指定をこれにしても同じ結果になる?
content = open(path,encoding='utf-8_sig').read()
ウェブ系など、すべてのシステムはUTF-8 でも、Windows だけは、CP932(shift-jis)。 5ch も、sjis だけどw こういうシステムは普通はない
>>892 の最後の行に書いてある
>UnicodeDecodeError: 'cp932' codec can't decode byte 0x84 in position 1163: illegal multibyte sequence
UnicodeDecodeError: 'cp932'
cp932 でしょ?
>>904-905 content = open(path,encoding='utf-8_sig').read()
で解決しました!
index.htmlはUTF-8で保存されていました。
後学のために単にutf-8だったときのエラーメッセージと元のエラーメッセージの比較をしようと思ったのですが、
utf-8指定でも動作するようになってしまって、その点はよくわからずでした。
(最初のときは違う行に書いてしまったかもしれません)
レベルが低くせっかく即答いただいたのに手間取ってすみませんでした。ありがとうございました。
今日初めてPython落としました! 何からやったらいいのかな?
ニシキヘビ属(Python)は、爬虫綱有鱗目ニシキヘビ科(ボア科ニシキヘビ亜科とする説もあり)に属する属。ニシキヘビ科の模式属。
class Foo(): __def __init__(self, bar:Bar): ____self.bar = bar 他のクラスのインスタンスをselfで受けるのって慣習ですか? 特に必要なければしなくてもよい?
>>912 質問の意図がよく分からない
FooのインスタンスがBarのインスタンスに依存してて
コンストラクタで依存するインスタンスを受け取って参照を保持しておきたいというのがそのコードの意味
>>913 fooはインスタンス生成時点のbarのインスタンス情報が要るけど
生成後は要らない、他のメソッドで使わないとき、self.barで保持する必要がないと思うんだけど、そういうコードあんまり見たことないなーと思って
def Foo():
__init(self, bar):
____x = bar.baz[0] * 2
____self.calc(bar.data)
とかでいいときもあると思うんだけど
だいたいインスタンス変数にするだしょ
なんか理由あんのかなっていう
def Foo():
__init(self, bar):
____self.bar = bar
____x = self.bar.baz[0] * 2
____self.calc(self.bar.data)
何見たのか知らないけど保持する必要がないんならインスタンス変数にする必要ないね
is-a・継承・一種じゃなくて、has-a・包含・部品化でしょ Foo は、Bar という部品を持っている
>>915 > とかでいいときもあると思うんだけど
だいたいインスタンス変数にするだしょ
ルールも慣例もないから君がみた例がそうだっただけ
ただコンストラクタで受けるとき普通はクラス全体として依存するからインスタンス変数で受けることが多いね
まだはやいと思うけどコード設計レベルの話だと、依存しない型をコンストラクタ引数に持つのは余計な情報を含み生成コストが高くなるから、本当に必要な情報だけコンストラクタで渡すか、ファクトリメソッド(staticmethodかクラス外のただの関数)を経由すると良い
>>903 >まずtensorflow.lite.TFLiteConverterがありません
Python 3.10 にtensorflow入れて確認したけど、あるよ
ちなみにtensorflow のバージョンは2.9.1
質問が既に触っちゃいけない人レベルだと答える気も起きない
>>920 こちらは2.11.0と出ました
こんな感じです
どっとup.org/uploda/どっとup.org2859768.png
ちなみに、tensorflow.kerasも、tensorflow.python.kerasになってます
>>924 こちらはIDLEでやってるけど、そちらは何でやってるの?
>>>import tensorflow as tf
>>>tf.lite.TFLiteConverter
<class 'tensorflow.lite.python.lite.TFLiteConverterV2'>
と出るから、あなたの環境?ではtensorflow.lite.python.lite.TFLiteConverterV2 でできるかも?
>>926 おおお、なんか出ました!!!
ちなみにVSCodeです
これをTFLiteConverterだと思って使えばいいんですね
ありがとうございます
ふぅ〜〜、、また迷える子羊を救ってしまったオレはメシア!
>>922 はウンコ!!
スクレイピングの勉強でも始めようと思って FANZAから持ってるエロゲーのデータ取得しようと思ったけど「18歳以上ですか?」のページに飛ばされるからうまくいかないんだよな それでぐぐってみたらちゃんと回避する方法も載っててさすがエロは人類の英知だなって
で、もしかして商品データのAPIとかあるんじゃないかと調べたら普通にあるじゃん FANZAでAPIの使い方も学べてしまうわけだ
プログラムが<b></b>で囲まれてるのがあるんですが、どういう意味がありますか?
def mySort(x): _return x-n ary=sorted(ary,key=mySort) 上記の様なソートでmySort関数に別の引数(n)を 与えたい場合はどのようにすれば良いのでしょうか?
>>936 <b></b> は、HTML のタグ。bold・太字
>>937 functoolのpartialとか
lambdaでclosureとか
>>940 ありがとうございます。以下のような感じでいけました。
def sortX(n):
_def sub(x):
__return x-n
_return sub
ary=sorted(ary,key=mySort(5))
どうでもいいけど、sortX(n)はmySort(n)でした
比較関数の名前はmyCmp()とかの方がよくないか
比較関数そのものじゃないのでgen_my_cmpとかに死体
floor が「切り捨て」なのはどういう意味なんだろう? 建物の「階」において、たとえば「2.5階」の高さがあったとしてもそれは2階の範疇、という理解でいいのか?
>>945 まぁ…ある意味?floorは床(底)、ceilは天井。金融でも
動詞だと倒す、床に押しつける的な意味合いも持つようだね
>>945 ガウス記号って学校で習わなかったのか?
習ったかもしんないけど、習った時以外に使ったことないな
フレームワークスレ動いてないのでここで jinja2のmacroって1つのmacroにつき1ファイル必要ですか? 便利だけど結構なファイル量になりそう
ヒットアンドブローを書いてみました
ここは直した方がいい、って箇所がありましたら教えて頂きたいです
よろしくお願いします
https://paiza.io/projects/V9PHgwFh2EAyhgA2PxxUbQ >>952 数値チェック、桁数チェック、重複チェック追加
blowの計算が違う
2重ループの変数がすべてiなのはややこしい
answer_list、input_list、リストにするメリットを感じない
import random answer_list_int = [] while len(answer_list_int) < 4: ____random_number = random.randint(0, 9) ____if random_number not in answer_list_int: ________answer_list_int.append(random_number) answer_str = "".join(map(str, answer_list_int)) print('''\ 数当てゲームをします! 4桁の重複しない数字を当てて下さい! 入力のチャンスは7回までです '終了する場合はexitと入力して下さい ''') for i in range(7): ____while True: ________input_number_str = input(f'{i + 1}回目 4桁の重複しない数字を入力して下さい->') ________if input_number_str == 'exit' or (len(input_number_str) == 4 and input_number_str.isdecimal() and len(set(input_number_str)) == 4): ____________break ____hit = len([j for j in zip(input_number_str, answer_str) if j[0] == j[1]]) ____if input_number_str == 'exit': ________break ____print(f'hitは{hit}です!') ____if hit == 4: ________print('クリアです!おめでとう!') ________break ____print(f'blowは{len(set(input_number_str) & set(answer_str)) - hit}です!\n') if hit != 4: ____print(f'残念!当たりは{answer_str}でした!')
つまらんな 人間が出題してPC(または鯖)に解かせるhit&blowを描け
重複しないならシャッフルして作る方が好み
こんな感じの
answer_list_int = random.sample(range(10),10)[:4]
>>955 細かい事だけど
isdecimal()って全角数字もTrueになりそうな
レスありがとうございました! いろいろ改善してみたいと思います
>>960 自分のスタイルで書けばいいと思うけど最終行はいかがなものか
print(f'\n残念!当たりは{"".join(answer_list)}でした!')
標準ライブラリだけで、ローカルタイムゾーンのoffset値だけ取得したい(日本なら+9みたいな)のですが、直接取得できる方法などありますか?
time.timezone / 3600 (→Asia/Tokyoだと -9 になる) が一番簡素ですかね
>>961 ありがとうございます
もう1つだけどうしても気になる箇所があるのですが、
>>960 の21行目で定義しているinput_number_strを、無意識のうちに
for文の外で使っちゃってるのですが、なぜエラーにならないのですかね?
Pythonではブロックは無視していい仕様なんですか?
>>965 関数ブロック(def/lambda)だけ考えればいい
>>966 すごい仕様ですね、ちょっと受け入れるのに時間かかりそうです
ありがとうございました
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: えいちちーぴーえす://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy これはどうしろとおっしゃっているのですか? data['column'][i]=(2**x) こういう式に文句言われたんですが
その警告文で検索したら秒で解決するけど、しなかった?
pd.set_option('mode.chained_assignment', None)
よくまとまってる
https://www.dataquest.io/blog/settingwithcopywarning/ https://linus-mk. はてぶろ.com/えんとり/2019/02/02/200000
https://linus-mk. はてぶろ.com/えんとり/2019/03/14/235402
https://linus-mk. はてぶろ.com/えんとり/2019/05/18/161328
https://qiita.com/mimuro_syunya/items/2464cd2404b67ea5da56 上のサイトを参考にしてジュピターノートブックからサイトの最後の方にあるソースコードをコピペして最後の3行をGetメソッドで指定したURLに飛びませんでした。
最後の3行を変更せずにやっても出来ませんでした!
上記のサイトの実行コマンドをbotファイルにするくだりはやってます。
目立ったエラーなどは現在無いです。
ブラウザ立ち上げた後にそのまま処理を行うにはどうすれば良いでしょうか?
日時と得点からなる表Aがあったとします 最高得点が更新された履歴の表を作りたいです Aの各要素にその日時より古い日時のAの全要素をouter joinかmergeでくっつけて、 くっつけた表の部分をgroupbyしてmaxを求め、 各要素の得点とmaxの得点が一致しているものだけをselectしたいのですが、 SQLならできるのにpandasではやり方がいまいちわかりません 普通にmergeしただけだと共通項があるものしかくっつけられないです どう書けばいいか教えてください
>>974 日時の順にループで1行ずつ最高点を更新したかどうかを判定して
更新してれば新しい表に(日時, 得点)を追記していけばいいよ
O(n)なのでouter joinするやり方よりも断然効率的
history=model.fit(x,t,epochs=epochnum,batch_size=batchnum,callbacks=[checkpoint,lr]) この行を実行すると、 Epoch 101/2000 1/1 [==============================] - ETA: 0s - loss: 0.11/1 [==============================] - 0s 3ms/step - loss: 0.1453 - mae: 0.2880 Epoch 102/2000 1/1 [==============================] - ETA: 0s - loss: 0.11/1 [==============================] - 0s 5ms/step - loss: 0.1452 - mae: 0.2888 などと出てきてしまいます ・完全に黙らせる場合 ・Epoch数だけ表示させる場合 どうしたらいいでしょうか?
失礼します class内のメソッド宣言の際に、1つ目の引数にselfを必ず入れなければならない 理由や背景が何となくしか分かりません それと、selfはJavaで言う所のthisと同じようなものと考えてよいですか?
他のOSでの挙動は分からないけどWindows版Pythonで socketのrecvで受信待機している時に他のpyファイルを動かすと動作が停止してしまいます 終了ではなく永遠に待機している感じ recv中に例外エラーも出ないのですが対処法ありますか?
40代未経験だがPython覚えればプログラマとして就職できる?
他の業務知識があれば出来るんじゃね? 研究者は無理やろ
求人数はJavaとJavaScriptとPHPの方が多いのだわ PythonはML系の求人が多いことを考えると 未経験から最初に業界に首をねじ込むための言語としては あんまりおすすめせんのだわ
cudaで処理速度が20万倍っていうデータがあるんだけど みんなはどれくらいの速度が適性だと思う?
>>983 文系で未経験者の王道は、Ruby on Rails でポートフォリオを作って転職する
YouTube で有名な雑食系エンジニア・KENTA の初心者向けRailsサロンとか、
RUNTEQ、東京フリーランスのデイトラなど
かよちんchannel
【半年間使ってわかった】PythonのwebフレームワークDjangoを学ぶメリット・デメリット
VIDEO かよちんは未経験の大学生で、Railsでポートフォリオを作って就職した。
1年運用で働いたが、開発したかったので転職した。
転職先では、Django で開発している
彼女は、初心者にはDjangoよりも、Railsを勧めている
理系なら大学院数学科とか、
AWS Certified Machine Learning(機械学習) - Specialty の資格があれば強い
q="太郎君の年齢は?" ans=12 ans2="十二" while True: try: text=int(input(q)) if text==ans: print("正解") elif text==ans2: print("正解") break except: print("不正解") これで12、十二とinputで入力すると正解と それ以外だったら不正解で最初に戻ると進行するようにしたいのですが 12以外だと全部不正解になってしまいます
>>991 text=int(input(q))
でint型にキャストしようしてるんだから、例えば十二とか入れたら
文字列⇒数値へキャストできずに例外が発生してexcept:のルートに入っちゃうだろ
せめて質問文らしく書こうな。 text = int("十二") の結果が0だからだよ。 int()をなくして12も"12"に変更して、全て文字列で扱うようにすれば
慣れないうちは簡単な書き方しよう ごちゃごちゃ詰め込まない while True: __print ('年齢は?') __ret = input() __if ret == 12: ____print('ok') ____break __elif ret == '十二': __else: ____print('no') if ret in [12, 12, '十二'] でもよい
>>992-993 ありがとうございます
自分の場合まずint()からしてよく理解してなかったです
うそ ret = input() ret in ['12', '12', '十二'] だわ 漢数字や全角ありうるならint型に変換しないほうがよいぬ
>>994 慣れないうちは動作確認しよう
エラーは詰め込まない
read.cgi ver 07.7.25 2025/07/21 Walang Kapalit ★ | Donguri System Team 5ちゃんねる
lud20251111144104caID:ln/vUyrzのレス一覧: >>322 比較対象は
> 他人の話を否定するだけの奴
だぞ、頭大丈夫か?
普通に考えてリストに関数をそれぞれ適用させたいならmapが一番シンプルでmapと同意の内包表記が最もPythonらしいのでは?
お盆も近いからデコレータに恨みがある奴も 這い出して来ているんでしょう
単にmapの人が、なんでmap使わないんだと言っているだけなのでは? それがデコレータsageに見えると
内包表記の方が断然好きだな〜、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
>>330 なんでzip?
そういう引数リスト専用の関数を作りたいの?
>>280 の望みは「intを引数に取り計算結果を返す関数を、"シームレスに"リストにも拡張すること」だからデコレーターが適当じゃない?Pythonicかどうかは知らん
デコレータは不適当 デコレータは基本的に元の関数を透過的に拡張するために使う物 def f(a, b, c)をデコレートしても デコレート前と同じf(a, b, c)で呼び出し可能で 成功時には同じ戻り値を得られるように作る 高階関数ならなんでもデコレータにすればいいわけじゃない
>>331 そのとおり、
>>280 だけでなく色んなパターンのリスト関数が簡単に作れるのだよ
このデコレータがあればね!
勉強になったわ。 今までPyQtでアプリ作っていたが、@pyqtSlot()がQtデザイナーからのリンクみたいなもんかと思ってました。 すっきりです。
デコレーターのメリットがあるならそれ使えばいいけど遅い上に記述量増えるしね
どう見ても
>>320 だろw
今回の話でデコレータが内包表記より優れているという理屈が理解できない def f(a): return a+1 a=[1,2] print([f(i) for i in a]) これで事足りるでしょ
レス:1-200 201-400 401-600 601-800 801-1000 ALL
このスレへの固定リンク: http://5chb.net/r/tech/1653225908/ ヒント: 5chスレのurlに http ://xxxx.5chb .net/xxxx のようにb を入れるだけでここでスレ保存、閲覧できます。TOPへ TOPへ
全掲示板一覧 この掲示板へ 人気スレ |
Youtube 動画
>50
>100
>200
>300
>500
>1000枚
新着画像 ↓「【まず1嫁】くだすれPython(超初心者用) その57 YouTube動画>3本 ->画像>9枚 」 を見た人も見ています:・くだすれPython(超初心者用) その29 ・【まず1嫁】くだすれPython(超初心者用) その58 ・くだすれPython(超初心者用) その43【Ruby禁止】 ・くだすれPython(超初心者用) その40 ・くだすれPython(超初心者用) その52【まず1嫁】 ・くだすれPython(超初心者用) その35 ・くだすれPython(超初心者用) その48【まず1嫁】 ・【まず1嫁】くだすれPython(超初心者用) その57 ・くだすれPython(超初心者用) その41【Ruby禁止】 ・くだすれPython(超初心者用) その29 ・くだすれFORTRAN(超初心者用)その6 ・くだすれDelphi(超初心者用)その16 ・くだすれDelphi(超初心者用)その54 ・くだすれDelphi(超初心者用)その56 ・くだすれDelphi(超初心者用)その60【Embarcadero】 ・くだすれC++Builder(超初心者用)その5 ・【モンスト】モンスターストライク超初心者スレ43 ・【モンスト】モンスターストライク超初心者スレ30 ・【モンスト】モンスターストライク超初心者スレ92 ・【モンスト】モンスターストライク超初心者スレ91 ・【モンスト】モンスターストライク超初心者スレ60 ・バイク超初心者「4速の時に信号が赤になり止まる場合、どうやってとまればいいのですか? 」 ・【モンスト】モンスターストライク超初心者スレ7 ・【モンスト】モンスターストライク超初心者スレ 113 ・【モンスト】モンスターストライク超初心者スレ18 ©3ch.net ・【モンスト】モンスターストライク超初心者スレ6 ・【モンスト】モンスターストライク超初心者スレ50 ・【モンスト】モンスターストライク超初心者スレ20 ・【モンスト】モンスターストライク超初心者スレ8 ・【モンスト】モンスターストライク超初心者スレ67 ・【モンスト】モンスターストライク超初心者スレ31 ・【モンスト】モンスターストライク超初心者スレ97 ・【モンスト】モンスターストライク超初心者スレ47 ・【モンスト】モンスターストライク超初心者スレ64 ・【モンスト】モンスターストライク超初心者スレ64 ・【モンスト】モンスターストライク超初心者スレ17 ©3ch.net ・【モンスト】モンスターストライク超初心者スレ70 ・【モンスト】モンスターストライク超初心者スレ97 ・【モンスト】モンスターストライク超初心者スレ 109 ・【モンスト】モンスターストライク超初心者スレ10 ・ヤフオク初心者質問スレッド #852 ・【Rank100↓】グランブルーファンタジー超初心者スレ427 ・【モンスト】モンスターストライク脱・超初心者スレ792【脱超】 ・【Rank100↓】グランブルーファンタジー超初心者スレ459 ・【Rank100↓】グランブルーファンタジー超初心者スレ549 ・【Rank100↓】グランブルーファンタジー超初心者スレ471 ・【Rank100↓】グランブルーファンタジー超初心者スレ444 ・【rank100↓】グランブルーファンタジー超初心者スレ603 ・【Rank100↓】グランブルーファンタジー超初心者スレ493 ・【Rank100↓】グランブルーファンタジー超初心者スレ466 ・【とにかく漏れない】電子タバコ9【超初心者専用】 ・【Rank100↓】グランブルーファンタジー超初心者スレ415 ・【Rank100↓】グランブルーファンタジー超初心者スレ478 ・【Rank100↓】グランブルーファンタジー超初心者スレ567 ・【DQ10】初心者大使を語るスレッド501 ・セキュリティソフト初心者質問スレッド ・【初心者でも】エギングPart118【上級者でも】 ・【Rank100↓】グランブルーファンタジー超初心者スレ477 ・【rank100↓】グランブルーファンタジー超初心者スレ619 ・初心者でもsexできる★出会い系サイト 9 ・【モンスト】モンスターストライク脱・超初心者スレ804【脱超】 ・【Rank100↓】グランブルーファンタジー超初心者スレ544 ・【rank100↓】グランブルーファンタジー超初心者スレ619 ・【初心者でも】エギングPart114【上級者でも】 ・【Rank100↓】グランブルーファンタジー超初心者スレ410 ・【Rank100↓】グランブルーファンタジー超初心者スレ521
04:42:38 up 19 days, 20:04, 4 users, load average: 39.00, 29.39, 29.03
in 0.33841705322266 sec
@[email protected] on 111118