Pythonのお勉強 Part68
レス数が1000を超えています。これ以上書き込みはできません。
!extend:default:vvvvv:1000:1024
!extend:default:vvvvv:1000:1024
↑スレ立てる毎に減るので、減ってたら3つに補充すること。
・当スレにRubyのソースコード類を書くことを禁ず
・Ruby等、Pythonではないプログラミング言語での回答類・質問を書くのも禁止
・「Ruby では」「Rubyでは」「Rails」正規表現→「^クソチョンw$」をNGワード登録推奨
・エラーを解決したいときは、かならず
エラー文(勝手に省略orスクショうp等の横着禁止)と
おま環(Pythonのバージョン番号+OS名とバージョン+IDE名)を書け。
★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
ttps://techiedelight.com/compiler/ Run Code機能あり。
ttp://ideone.com/ デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
ttp://pastebin.com/ まずまずシンプル。
ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。
◇Pythonオフィシャルサイト http://www.python.org/
◇Pythonドキュメント https://docs.python.org/ja/3/
◇まとめwiki ttp://python.rdy.jp/
●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その57
http://mevius.5ch.net/test/read.cgi/tech/1653225908/
〇前スレ〇
Pythonのお勉強 Part67
https://mevius.5ch.net/test/read.cgi/tech/1653540315/
次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
### END of TEMPLATE ###
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured meboっていうチャットボット用のAPIを操作したいのですが
単純なAPIが使えなくて挫折してます。
meboHP: https://mebo.work/
meboAPIのAI構築について:https://zenn.dev/makunugi/books/f3d9eb62b6d133/viewer/f0c36f
環境
google colab(Python 3.7.14)
コード
https://pastebin.com/jjDUXv4h
現在の出力
rpc error: code = InvalidArgument desc = Document name "projects/mabo-f1cc7/databases/(default)/documents/bots/" has invalid trailing "/".
サーバーからのステータス
<Response [500]> 勉強してて、5ちゃんの名前欄に!omikujiって入れたら結果が出てくるけどPython使ってるのかーってすげー関心したよ vscodeとtkinterのナヤミデス
class myLabel(tk.Label):
__def __init__(self, parent, *agrs, **kwargs):
____super().__init__(parent, *a, **kw)
tkinterでカスタムウィジェット作るときこうすると思うんですが
これだとmyLabel呼び出し時に親のパラメータの一覧が表示されません
l = tk.Label() だと引数ズラズラーと確認できるのに
myl = myLabel() だとスン…というかんじ
myl = myLabel(
と書いたところで、master, cnf, bg...
が表示されるよう書く方法はないですか? class myLabel(tk.Label):
__def __init__(self, parent, *agrs, **kwargs):
____super().__init__(parent, *args, **kwargs) >>16
手元だとmyLabelでもスラズラでるから言語サーバかな
Pylanceになってるか確認してみて >>10
解決しました。>>10のレスは無視してください。 >>17
この関数の引数、
可変長引数のあとに連想配列では値がわたらないだろう 初心者です。
seleniumでGoogleChromeを起動させたいのですが、
コードを実行しても一瞬起動するだけですぐに落ちてしまいます。
chrome,chromedriverともに105.0.5195.127です。
time.sleep()を使えば一応閉じることはありません。
ネットで調べたのですがchromeとchromedriverのバージョンを一致させれば解決できるらしいのですができなかったのでわかる人いたら教えてください。
from selenium import webdriver
import chromedriver_binary
driver = webdriver.Chrome()
import time
driver.get('https://www.google.com/') chrome,chromedriverともに105.0.5195.127と書いてるのにバージョンがあってないとはいかに 繰り返し使うプログラムならドライバー自動で取ってきてくれる
webdriver-manager使った方がいいよ webdriver-managerで上手くいきました。
ありがとうございます。 漏れは、Ruby でSelenium Webdriver を使っているけど、
Chrome の自動更新で、105.0.5195.127 になって、急に動かなくなった
ChromeDriver 105.0.5195.52 をダウンロードしたら、正常に動いた abspath → absolute path
__init__ → initialization
pardir → parent directory
curdir → current directory
getcwd → get current directory
chdir → change directory
こういうの、英語を略してるのだけど思うけど、元の略されてない英語のスペルを調べられるサイトとかありませんか?
毎回ググって出てきた検索結果ページで「abspath (absolute path)」みたいになってるのを探してるのですが、時間が掛かってしまいます cwd は current working directory >>32
抜けてました訂正助かります
略称の元を調べる方法で、地道にググる以外の方法とかも分かりませんか? >>33
python.org/ の検索窓にgetcwd, chdir, cwd, ch 色々入れてみても、ググった時と一緒で地道に複数タブでページ開いて探すのと同じでした >>35
わからないときに調べるのではなくて、一括でリストみたいに知りたいということですか?そういうサイトは知らないです 知識がないのが問題だったら知識を得るか補助ツール使うしか無いんだよなあ
google翻訳みたいにリアルタイムでオーバーレイで適当な情報出してくれるやつがあればいいんだけども >>30
そういうサイトがあると便利だよな
是非作ってくれ sizes = list[(int, int),,,]
からmax_widthとmax_heightを取りたいんだけど
numpyなどの外部ライブラリなしだったら
max_width = [i[0] for i in sizes]
max_height = [i[1] for i in sizes]
が速くて見やすいですか?
もったいないからループ一回で両方ゲットできたらいいんだけど、天の声がそれは遅いというんです >>36
pythonの広辞苑みたいなのあるなら知りたいです
>>37
そんな感じです。イメージとしてはこんな感じ
https://i.imgur.com/okACaxU.mp4
>>39
もうすでに誰かしら作ってそうな気がしたのですけど意外にないんですね なぐり書きしたので案の定スペルミスしてる
IME辞書みたいに誰かしら作って配布してたりしないのかな
あったら本当に便利だと思う >>40
max_width = max(sizes)
max_height = max(sizes, key =lambda x:x[1])[1] いまいちどういうものを欲してるのピンと着てないけど、存在しないという事はそういうことだろ
もしくは、誰もが思いつかなかった画期的なものの可能性はあるので、作れば人気でるかもしれないよ エディタの補完機能とか知らないわけじゃないですよね >>30
python が発展してきた歴史を知るといい >>30
英語の略語を集めたサイトはあるけど一般的な略語はともかくabspathみたいな奴はヒットしないし逆にcwdみたいに短い略語はヒットしまくるから使いづらいよ
https://www.abbreviations.com/category/COMPUTING >>30
osモジュールの該当メソッドの説明を読むのがいいと思う
https://docs.python.org/3/library/os.html
一般的なunixコマンドから拝借してるものが多いから
pythonでの一覧がないならそっちを調べるといいかもしれない 30について回答くれた方々ありがとうございます。コメントで教えてもらったサイト見てみます
ググって意味を調べる時間の短縮目的は、そもそも我儘な要望だったかもしれません https://i.ibb.co/QnYv5Sz/CB-0001.jpg
望みの実行結果にはなるのですが、パスがないエラーを吐いてしまいます
本来は、os.mkdir(“パス名”)、os.makedirs(“パス名”)、のようにパス名を挿れるとのことですが
for文の変数を引数に渡したい場合はどう記述すればエラーを吐かないのでしょうか?
今朝始めたばっかなので用語の使い方間違ってるかもしれません >>52
エラーメッセージにあるように空文字が渡されてるのがエラーの原因
split(‘\n’)した結果のfolder_listの中身を確認すると分かると思う
でもってsplit()じゃなくsplitlines()を使うといい >>53
おかげで解決しましたありがとうございます
テキストファイルに何もない改行がありました 問題とは関係ないけれど
パスを操作する時はpathlibのほうがいいよ 正規表現で16進数を表すのに、いちいち[0-9a-fA-F]と書くのが面倒
もっとスマートに書けないものか case-insensitiveで [\da-f] https://i.ibb.co/LkLcvky/CB-0001.jpg
pathlibというのを使って>>52と同じことをやってみたのですが、書き方が間違ってる気がしてならないので指摘して欲しいです
line14-15は何で上手くいかないのかも教えてほしいです まず、12行目のmkdirで例外発生してない?
temporaryなんてらフォルダはchdirしてるからすでに存在してるんでしょう? os関連の処理は互換性とか捨てて、subprocessでやるのが楽でしかも安定してる 繰り返される任意の文字列を1回の繰り返しに直す方法ありませんか?
"abcdabcdabcdefg"→"abcdefg"(abcdの繰り返し)
"abababc"→"abc"(abの繰り返し)
"aabbaabbc"→"aabbc"(aabbの繰り返し)
パターンの長さはとりあえず固定でいいので(例えば4でabcdとaabbはマッチできる)一気に置換する方法ないでしょうか >>60
存在してます。path.rename()書いてない時は、同名のフォルダが作られて「すでに存在してる〜」みたいなエラーを吐いてました
そもそもpathlib使って>>52をやりたい場合は、osを使う必要がなかったりもするのでしょうか? 変数名とか色々、短く略して書いた方が良いのでしょうか?
入力時間的には大差ないので、見返した時に分かりやすいようにしてるのですが
これは初心者だからで、経験者から見ると見苦しいとか、むしろ略されてた方が見やすいとかありますか? >>62
質問の意味がよくわからん
"abcdabcdefcdefg"の場合どうしたいの >>67
普通に処理したいだけです
>>68
"abcdabcdefcdefg"なら"(abcdabcd)efcdefg"→"abcdefcdefg"だと思います あ、cdefcdefが繰り返されていたんですね…
最終的に人がチェックする工程があるので、先にマッチした方優先とかで大丈夫です 'abcabcdabcabcdefg'
だったら? 長さ4固定でいいなら、正規表現あたりで
>>> import re
>>> re.sub(r'(....)\1+', r'\1', "abcdabcdabcdefg")
'abcdefg'
>>> re.sub(r'(....)\1+', r'\1', "aabbaabbc")
'aabbc' >>73 >>74
ありがとうございます!
文中に含まれてるものにも対処したいので73を長さ変えながら複数回適用で使いたいと思います x = [i for i in range(10)]
idxs = [start, end] # 0 <= start <= end <= max(x)かつend +=1
xが上記の場合
最小はidxs = [0, 1]
最大は idxs = [0, 11]
です。このとき
for i in idxs:
__x[i]
だと最後が11のときindexErrorになるんだけど
try exceptでcontinueする以外にいい書き方ないですか
if i == len(x): breakみたいなのとか
_idxs[1] -= 1
for i in idxs:
みたいなのは嫌です >>84
これは完全に誤訳
翻訳元では、GitHub上の数多くのOSSにこの脆弱性が存在するからCopilot等がそれを学習して広がるかもしれないと言っているだけ 確かにtarを使うリポジトリではcopilot経由で広がる可能性があるけど、tarを使うリポジトリなんてリポジトリ検索してもそんなにないので実数としては眉唾
依存関係から侵入してくる方がよっぽど可能性が高い
Copilotが批判されがちなので批判の文脈で喋ったほうが肯定的に聞いてもらえるだろうという余計な意図が入ってるのではと邪推してしまうね:) >>86
> Trellixによると、35万件を超えるリポジトリがこの脆弱性に脅かされていると見られ、その多くでGitHub Copilotなどの自動ツールが使われているとのこと。
前知識なく普通にこれ読んだら、35万件のリポジトリがGitHub Copilptを使っている、そして、Copilotがその脆弱性の原因であると思うでしょ
というかこの記事書いた人はたぶんそのように誤解してる
> https://www.trellix.com/en-us/about/newsroom/stories/research/open-source-intelligence.html
まあソースも推計方法や論理がガバガバで似たようなレベルだが >>81 が何を考えてるのか詳しく知りたいなωωω >>81
インデックスなら0~10の番号で管理すべきじゃないの
endを取り出して使うときに+1すれば良いんじゃない
スライシングと混同してるのかな >>90
外部入力でスライス範囲を受け取ってて(start, end)
その値を使いまわしてインデックスアクセスしたいんだろう
テーブル扱うGUIとかでままある 単にインデックスの範囲とスライスを混同してるだけだろ
外部からの入力なら値のチェックは必須だしその時に調整しとけばいいだけ 一昔前のseabornのカラーマップだか忘れたけど1から数えて最後の数字を入れるようなインデックス指定を偶に見かける
[0, 10] → 0から9までと
[1, 10] → そもそも0が存在せず1から10
この2つの書き方にそれぞれ名前ついてたりする? >>93
前者は「半開区間」として [0,10) といった表記にするのをよく見る メモリマップとかで、
A: 0x0000 - 0x0fff
B: 0x1000 - 0x1fff
みたいに末尾をfffにせずに、末尾は1足して表記する、という約束にした方が使いやすい そうすると最後は
F: 0xf000 - 0x10000
と最後だけ2バイトでは表記しきれなくなるね すみません、プログラミング初心者です、python構築について質問があります
python3.10.7をインストールしたのですがコンドプロンプトで確認したらpython 3.9.12になっています
もしかしたら以前DLしてたのかと思って探しても見つからないのですが
こういうものなのでしょうか? すみません、調べてみたらanacondaの方にpythonが入ってたみたいです >>101
そんなに有名な事でしたか…
調べても出てこなかったので 君は悪くない、anacondaも悪くない
anacondaを進める入門的な書籍やサイトが悪い pipでバイナリを配布できなかった時代ならまだしも、今そんな時代じゃないしな~ 何かのツールをインストールするとpythonも一緒にインストールされるのはよくある
python2だったりもする
大抵は、自分用のバイナリを自分で使うだけなので迷惑はかけないけど、
行儀の悪い奴もいる 未だにpython事始めで検索すると
無責任な入門サイトの「anaconda入れとけ☆」 ばっかり
いやべつにいいんだけどさあanacondaでも。オールインワンで便利なのも分かるけど anacondaでもpipでも両方使えばいいジャマイカ condaのコマンドで新しい環境作れるようにしたらスタンドアロンのpythonが外れた記憶ある 俺も初心者の頃はアナコンダ入れてた。
けど後から無駄も多く必要ないことがわかったのでアンインストールした。
pythonとVSCodeあれば事足りる。 ファイル名に使えない文字を全角に変換するコードってこんなに長くなるものなんですか?
https://qiita.com/kusunamisuna/items/a32679874afedc032158
name_ng = ["/","\",":","*","?","<",">","|"]
こんな感じでリストに入れてfor文の中で replace で置換すれば良いんじゃないかと思ったけど、リストにする段階でエラーになります
上記のURLの記述が最適解?
簡略化された書き方があったら教えてほしいです。 a=True
b=True
aかつbがTrue、それ以外の全て
の条件って
if not (a and b): でよかったっけ・・? >>111
translate使えばforすらいらない >>111
その記事が最適かどうかは別問題として、まず0x5cをちゃんとエスケープして、あなたの考えを動くコードとして完成させよう
その上で、記事のコードと分かりやすさや速度を気の済むまで比較してみればよい >>113
調べて試してみます
>>114
そもそも ”\” は文字列としても単体では使うことができない感じですかね?
知らなかったです。教えてくれてありがとうございます >>112
if all([a, b]):
else allとanyは積極的に使おう
フラグを別に持つとか途中で抜けてループ変数を見るとか、
何でレガシーな言語はそれで満足してたのか判らん 今日からPython始めたんだけど、エラーが出て動かなくて悩んでたらインデントが原因だったw
調べたらインデント自体プログラム構造的に意味を持ってたんだな。。。 少しコードが長くなってきたので、関数を定義してみようと思ったのですが
関数を使うくらいなら、最初からclassとmethodでやった方が後々便利ですかね?
それから現段階ではまだinstance変数を使うかどうかは不明ですが
classの最初に__init__は決まり文句として書いておいて良いのでしょうか?
仮に全く使わなかった場合にバグの元になったりするのでしょうか? そのレベルならまず関数に慣れよう
classはそのあと classを使うほうが常に優れていると思ってるなら認識を改めたほうがいいよ。
classと関数両方使えるがpythonのメリット。
標準ライブラリだって両方共存してるのにどちらかを捨てるなんてもったいない 自己満だからといっていつも意識的にそれらを考えていかなければより良い設計はできないのかもしれない クラスはメンバ変数にselfが強制だからコードが冗長になって嫌だわ >>125
インデントも深くなるし、状態持つ必要が無ければモジュール化で十分よな 大仰なクラスを作ろうとするから
インスタンス変数が2つだけ、みたいなのでも十分役立つ >>127
それくらいならNamedTupleでも良いかな クラス名をclass Hoge
ファイル名をhoge.py
インポートでimport hoge
インスタンス名何にしようかいつも悩む
??? = hoge.Hoge() >>81
そもそも[0,1]のときにx[0]を2つ取り出したいのかどうかがよくわからないな
あと、最大(?)は[0,10]じゃないか?
[0,9]のときと[0,10]のときでどう処理を変えたいのかよくわからない
半開区間に含まれる最小最大を取り出したいなら、
for i in [idxs[0], idxs[1] - 1]でいいと思うのだけどこれは嫌? 木構造とかグラフ構造を自作したいなら(間々ある)、
クラスにした方が便利なときある気がするけどな。
get_tree_children(node)とかしだすなら、node.children()の方が名前空間がすっきりしていいし。
実装の詳細を見せたくないかどうかというよりは、関心の分離をしたいかどうかによるような気がするな。
確かにクラス作るまでもないようなことは多いけど。 python 3.9.10
a = (1, 2, 3)
b = a
c = (1, 2, 3)
print(a==b)
print(a is b)
print(a==c)
print(a is c) #True?
なぜ a is c が true になるのでしょうか? >>139
それREPLでやってるからinterningが効いてないじゃないかな
>>135
Tupleはimmutableだからaとcが同じオブジェクトを指しても問題なくて
Pythonが最適化をした場合はa is cがTrueになるケースがある
「interning」でググってみて
例えばTupleを関数で返すようにすればinterningされずにFalseになると思う
def foo(x):
return (x, x+1, x+2)
a = foo(1)
c = foo(1) >>140
ありがとうございます、オプティマイゼーションの余地がある、ということですね、納得しました a is cが真になるかはかなりケースバイケースな気がするし、
中身を比較したいんだったら使うべきじゃないね
本当に同じtupleインスタンスかどうかを確認したいときだけにすべき tupleだけの話ではなくてどの型でも同じだけどね
例えば文字列とか n=12345.67
小数点以下が何桁あるのか調べたいのですが
len(str(n).split(".")[1]) if isinstance(n, float) else 0
こんなんでいいですかね・・? >>144
誤差で予想外の挙動しそうだからDecimal使う方がいい >>144
それだと
n=1.0 -> 1
n=0.00001 -> IndexError
になる
len(format(n,".17f").split(".")[1].rstrip("0"))
後ろのif isinstance(n, float) else 0も不要
n=1.0 -> 0
n=0.00001 -> 5 >>145-147
たしかに
0.30000000000000004に対して17得られたのは正解だと思いますが
0.00001で1e-05になっててエラーでました
Decimalかformat使ってみようと思います
ありがとうございました やりたかったことは
受けとった1234.56や0.12345などの固定小数点数に
0.1とかを掛けたり足したりして計算、変形したのを
受け取った固定小数点数の整数部と小数部の数を維持したまま
固定小数点か文字列で処理したかったのですが
改めてやってみるとなんか勝手に桁数が変わってしまいますね・・
1234.56で受け取った場合、1.05を掛けたとき→1296.288ではなく1296.29
0.12345で受け取った場合、1.05を掛けたとき→0.1296225ではなく0.12962
1234で受け取った場合、1.05を掛けたとき→1295.7でもいいし1296でもいいし1296.0でもいい
みたいにしたかったのですが難しい・・ from decimal import Decimal
str(Decimal(0.123456))
str(Decimal(0.123456)*Decimal(1.05))
#'0.1296288000000000015945911258'
あれ、そもそも0.123456の小数部の桁数はどうやって知るんだっけ??
てところで詰まってます・・ 冗長な気がしますがこんな感じにしてみました
何かバグが発生しそうな気がします
from decimal import Decimal
ary=[1234.5,165,0.34,0.0001,0.000001,3.00001,0.1*3,123456]
def f(n):
s=format(n)
return int(s.split("-")[1]) if "-" in s else len(s.split(".")[1].rstrip("0")) if "." in s else 0
r=1.05
for n in ary:
d=f(n)
c=Decimal(n)*Decimal(r)
rs=c.quantize(Decimal("0."+("0"*d)))
print(n,c,d)
print("-->",rs,"\n") >>152
format使うの提案したけど使わないほうがよさそう、誤差がでる
f(n): 負数で落ちる
s=str(n).lstrip("-")
c=Decimal(n*r) のところで
n*r で誤差がでる
c=Decimal(str(n)) * Decimal(str(r))
負数対応四捨五入 -0.015 を四捨五入して -0.02
rs=((c > 0) - (c < 0)) * abs(c).quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)
-0.015 を四捨五入して -0.01のようにしたい場合
rs=c.quantize(Decimal("0."+("0"*d)), rounding=ROUND_HALF_UP)
四捨五入したいのかよくわからんかった、roundingは好みのオプションでどうぞ >>154
ありがとうございます
やはり至るところで誤差が発生するのですね
四捨五入は今回の用途ではどちらでも良い感じです
せっかくなのでまとめてみました
https://ideone.com/JmTu06
ありがとうございました 先にIEEE754読んでみては?
誤差に関しての勘所がわかるようになる Pythonに限らず浮動小数点数を使う場合は常に誤差の問題がつきまとう。
0.1というのがすでに二進数ではきっちり表現できない数字なので、有効数字を何桁にするのかというのは実装の段階で決めなくちゃならない。
https://docs.python.org/ja/3/tutorial/floatingpoint.html
正確に表現できるのは、0.5,0.25,0.125...と1を2で割っていった数とその整数倍のみ
0.1は1/(2×5)となり1/5が2進数では循環小数となり浮動小数点数では正確に表せない。
ということを念頭に置いてまず何がやりたいか考えた方がいいよ。
decimalモジュールは便利そうだね。 >>154
どちらの書き方でも
-0.015 を四捨五入したら-0.02だった、すまん
-0.01にしたい場合は自力でなんとかして 昔から不思議なんだけど
何で分数で処理しないのかな?
最後に割り算を一回だけすれば
誤差がでないじゃないの Pythonは整数側の桁数制限が無いのを利用して高精度にできそう >>160
似たような大きさの数字ならその発想もいいけどね
現実はコスパの悪い任意精度の演算が必要になることが多いのでは >>160
昔GCD付きの分数クラス作ったけど
結局はdoubleになったことがある >>160
四則演算だけならいいけど√とかsin( )とかはどうする?
>>161
掛け算、足し算で誤差がでるケースとは? python chapelについて質問です。
情報があまりないので、チャペルについてお勧めのサイトがあれば教えてほしいです。 クヌースのTAOCP読むといいよ
コンピュータでの数値計算の全てが書かれてる >>170
sinsin, cos のまま計算するって話だろ
数学不得意か? >>174
話は>>160から始まってて途中は代数的な操作で最後に一回だけ演算することで誤差を抑えられるって話な 組み込み系で、積算の量を保持していて
1秒毎に測定して何年というスパンで計算を続けると、
もう32bitでは精度が足りなくなる 最後に浮動小数点数にして誤差を減らす方法は、代数的な計算ができる必要がある。
Mathematicaとか、SymPyだな。
ただ代数的な計算は上手いこと式を整理してやらないと簡単にならないことも多い。積分は公式を知らないと出来ない、というのと同じ。
有理数の四則演算だったら単なる有理数演算を逐次的に実行していけば問題ないだろうが。 >>177
んなことないだろ。加法定理やら積和、和積の公式とか習わなかったのか。あの辺使うと極端な場合の誤差減らせるよ。
xが0に非常に近い場合のsin2x/sinxとかね。 お金の計算とかは
有理数しか出てこないんだから
分数で十分のような気がするんだが 丸めたくない意図だと思うが加減算だけで速攻破綻する 単にbit数が足りなくなるという話なので、
必要に応じてbit数を増やしていけばいい
無限に増えることは絶対ない 質問です。
djangoの資格を作りたいとおもってます。
需要はありますか? https://translate.google.com/
Google翻訳のページで、テキスト入力ボックスから「Tabキー」を1回押すと必ず「音声を聞く」のアイコンに移動するようにしたいのですが、Pythonで可能ですか?
通常は3回で行けるのですが、”原文の言語”や”もしかして”が表示されるとTabキーを押す回数が変わって面倒です。しかもリストが表示されててそのパターンなのか見えない。
Pythonで何とかしようとしてるのがそもそも間違っている気がして、簡単なHPをJavaとか?で作ったり、アドオンを組んだりとか別の手段が必要ですかね? >>188
現在のフォーカスを取得することでTab回数制御できそうだけど
そもそも音声を聞く、のidありゃそこに飛ばせるやろ >>190
seleniumを使ってプログラムを実行した時だけなら出来たのですが、普段使いで常にその状態にさせる方法が分からなかったです。
独自の簡単なChrome拡張機能を作る方向が一番良さそうな感じです。そっちで少しやってみます。お騒がせしました。 >>191
拡張起こさなくてもTampermonkey拡張でスクリプト書くだけ USWCとか使ってESCキーを押したら画像認識で再生ボタンクリックとかにすると簡単そう
ESCだと位置的に押しやすいし予測候補も消える
pyautoguiみたいなの使えばPythonでもUWSCと同じ事出来たはず
windows限定の話だけど 拡張する方向でやってもすぐに使えなくなったりするので、
キーやマウスの操作を発生させる方向でやるのが結局ベストだったりする >>192-194
最初に調べるキーワードが出てこなくて分からないことが多いので情報助かります
頂いた情報を元に解決する方向でやってみます。ありがとうございました。 >>169
>>173
複素数や四元数を使うのが割りとマジでお薦め >>188
Ruby, Selenium でも、JavaScript を使って出来たけど、
ソースコードの何かの単語がブロックされるので、
ここには貼れないので以下へ
https://jsfiddle.net/w3anscm6/ 質問です
以下のプログラム(wikipediaの今日は何の日)をエクセルで起動させたときに最後の年号の()が取れてないとおかしいのですがどこのコードが間違っていますか?
優しい方教えてください
import requests
from bs4 import BeautifulSoup
import csv
import re
url="https://ja.wikipedia.org"
response=requests.get(url)
soup=BeautifulSoup(response.content,"html.parser")
top_entry=soup.find("div",attrs={"id":"on_this_day"})
entries=top_entry.find_all("li")
today_list=[]
for i,entry in enumerate(entries):
today_text=entry.get_text().replace("(","(").replace(")",")")
match=re.search("\(([1-9].*?)年\)", today_text)
if match:
today_list.append([i+1, entry.get_text(),match.group(1)])
else:
today_list.append([i+1, entry.get_text()])
with open("output.csv", "w", encoding="Shift_JIS") as file:
writer=csv.writer(file, lineterminator="\n")
writer.writerows(today_list) 何度も本(スクレイピング・ハッキング・ラぼ)見返したけど間違ってないんです… お願いします
https://ideone.com/vADQwg
for i in range(1, 100) で 99 回 next を呼んでいるのに、なぜ 79 で終わってしまうのですか? >>203
すげぇこんなのあるんだ
でも解決しなかった(´・ω・`) >>204
n=15のときFizzBuzz Fizz Buzzの3つ表示されます これでいけそうですが、どうでしょうか
1から100までカウントして、15で割れたらFizzBuzzと表示して、5で割れたらBuzzと表示して、3で割れたらFizzして数字を表示する 修正した
1から100までカウントして、15で割れたらFizzBuzzと表示して、5で割れたらBuzzと表示して、3で割れたらFizzして数字を文字列で表示する >>206
elif にするべきだったんですね!ありがとうございます! ウェブスクレイピングをやってみたくて奮闘しておりますが、CSVへの書き込み時にエラーがでます
どう改善すればよいかわからず困っています。助けてください。
おま環(Python 3.9.12+Windows10+VScode)
【コード】
for a in soup.find_all('a'):
link = a.get('href'), a.text
link.to_csv('link.csv')
【エラー】
link.to_csv('link.csv')
AttributeError: 'tuple' object has no attribute 'to_csv' >>203 で
Python
Tuple to dataframe
で聞く https://aiprogrammer.hashlab.jp/
ウェブスクレイピングで、aタグを取得し、そのaタグをcsvファイルに出力するコードを作成してください。
import csv
from bs4 import BeautifulSoup
with open("sample.html") as f:
soup = BeautifulSoup(f, "html.parser")
csv_file = open("output.csv", "w", encoding="utf-8")
writer = csv.writer(csv_file)
for a in soup.find_all("a"):
writer.writerow([a.text, a.get("href")])
csv_file.close() >>211 213
丁寧に教えてくださりありがとうございます。 >知恵袋にも質問したのですが
5ch はマルチポスト禁止です!
5chで質問する場合は、他での質問を取り消してからにしてください >>216
fj ではマルチポスト禁止の理由がありクロスポストという代替があったけれども、ここでのマルチポスト禁止の理由は? マルチ野郎はよそで解決しても報告しない
放置してそこら中にゴミを残す ぶっちゃけスレは落ちて過去ログになるし
検索性も低いから集合知の蓄積なんてしないよ
マルチポスト禁止は形骸化した旧きネチケットだと思う >>222
いやぁそうでもないと思うけどねぇ
2ちゃんねるの過去ログをあさって解決方法を見つけたことも数多あるし
解決できない場合でも、ヒントになるようなことが散らばっていて、それをきっかけに探し出せることもある
検索のやり方次第じゃないか? >>223
調べごとはよくするけど
2ちゃんで解決したことはないな、というか、検索方法によるだろうが出てきすらしない
大体Qiita、個人ブログ、stackoverflowのどれか >>224
いまはそうした5ちゃんねる以外の方がまともな完結方法があると思うよ
でも以前は、そういうのがほとんど当てにできなかったり、
*nixやマイナー言語、ハードウェア特有のトラブル、アングラ系wなんかだと、
英語資料を当たるきっかけやヒントが欲しかったりしたので、
2ちゃんねるのちょっとした書き込みがありがたかったなぁ
いまでも、"site:5ch.net" をつけてキーワードをググることで、
5ちゃんねるの集合知はちゃんと機能しているよ 2ちゃんねるに書いてある事を、
そこまで信用したことはないな
あるとすれば、裏が取れたとき位
リンク張ってあっても、あやしげなサイトだったりすることもある 今回みたいに簡単なエラー文も読めねえだけのカスがネット上に散らかることが多く
これが害悪であるのでマルチポスト野郎は基本的にクソである
集合知の分散ではない。無知の飽和が問題 >>227
エラー文のseleniumは既にインストール済だぞ >>218
seleoniumはインストール済だよ
pip install selenium でね Pythonが複数バージョンインストールされてるってオチじゃないの
よくあるAnacondaどうこうってやつ selenium一度アンインストールして再度インストールしたら出来ました
スレ汚しスマン >>231
朝早いですね!
再インストールしたら出来るようになりました
何故か知らないけど……
……というより勝手にブラウザが開いて閉じての動作を見た時は感動しました
すげー勉強する意欲が増した >>219
マルチポストされると同じようなレスを複数回読むハメことあるし回答したら他のスレで既に解決してたとかあるからそりゃうざいわってことだろ
ちなみにクロスポストはたいていのリーダーでどれか一つ読めば他のグループへの投稿も既読になるし回答する際もディフォルトの回答先グループが指定できるから回答が散らばることも防げる 原神スレかpythonスレかで迷ったんですけど、ちょっと失礼します。
https://github.com/shrubin/Genshin-Artifact-Rater
ディスコbotがサ終してたのでありがたくオフ環境に導入すべく頑張ったんです。
setupの手順から一通り終えてpy bot.py後なんですが
raise ValueError("Duplicate keys!")の無間地獄にはまってるんですけど
列行文でエラー指摘されてチェックしても全然関係無さげでわからない時どこ見たらいいですか?。
やっぱり基本を熟知してる人は修正して当たり前な場所とかを理解できてなくてエラー起きてるんですよね。たぶん。。
詳細足りなさすぎるのは理解してるんですけど、ほんと憶測適当アドバイスでいいので教えて下さい。 >>220
それが理由だとしたらそもそも質問できる場が複数存在していて統一されていないことが悪いってことになる。 >>235
Duplicate keys! って、
データベースのUNIQUE インデックスまたは PRIMARY KEY に、
既に存在する同じキーで挿入しようとしたとか?
そのGithub のbot.py 内を「Duplicate」で検索しても、見当たらないけど?
どのファイルのソースコードなの? >>237
bot.py実行後に、~\Programs\Python\Python38-32\Lib\site-packages\toml
内のpython38-32のdecoder.pyからエラーが出てます。
powershellを使いました。 ほぼ素人ですみません。 コードじゃなくて食わせるデータがおかしいんでないの 「python toml decoder duplicate keys」で検索!
TOML ファイルの形式になっていないとか?
ファイルがBOM付きUTF-8 になっているとか?
Python は、BOMなしUTF-8 じゃないの?
https://git.cardiff.ac.uk/c2021544/blogg/-/blob/abf082d45bcacad0728c2a03e91baf103046eba9/venv/lib/python3.6/site-packages/pip/_vendor/toml/decoder.py
このファイルの781, 783 行目に、raise ValueError("Duplicate keys!") がある >>241
UTF-8になってました。
ValueError: Duplicate keys!とTomlDecodeError: Duplicate keys!が出ていますが
デコードが実行された結果キー重複が起こっているのを知らせただけで、原因はやはりbot.pyの中にあるのでしょうか? >>242
tomlでエラー出てるなら
bot.pyで
config = toml.load(open("config.toml"))
っていう記述あるけど、config.tomlの中身がおかしいんじゃない? Traceback (most recent call last):
File "test.py", line 31, in <module>
func1()
File "test.py", line 28, in func1
func2()
File "test.py", line 30, in func2
raise Exception("hogehogeException")
Exception: hogehogeException
こういうファイル名や行数とか出てないの? TOML のValidator で、TOMLファイルの形式が正しいかどうか、チェックすれば?
「toml validator online」で検索!
プログラマーなら、VSCode で、〜/toml/decoder.py をデバッグするとか、
decoder.pyを差し替えて、
raise ValueError("Duplicate keys!") の前後で、ログ出力してみるとか PyAutoGuiも便利だけど何でもできるかというとかなり限定的
画面がこういう状態になったらこの条件に合う部分を探して、
この範囲をコピーしてこのアプリに切り替えてコピペ
みたいなことはできない ライブラリ関数の情報を調査する方法についての質問です
sagemathというpython wrapperにあるpolygon3dという関数がどういうキーワード引数を持っているのか調べたいのです
ググるとinspect.signature関数というのが見つかります
コレでpolygon3dを調べてみると
signature = inspect.signature(polygon3d)
print(signature.parameters)
OrderedDict([('points', <Parameter "points">), ('options', <Parameter "**options">)])
と出ます
おそらく位置引数'points'とキーワード引数がいくらかあるという意味だと思うのですがやはりコレが限界なんでしょうか?
どんな名前のキーワード引数を持ってるかの一覧表を出力するような方法はないもんなんでしょうか? >>250
オープンソースなんだからGitHubに見に行けばいいじゃん >>251
そうなんです
実際sagemathは割とドキュメントもしっかりしててググれば一覧とかもあります
でもいちいちめんどくさいじゃないですか
もしかしたら各オプジェクトで利用可能なキーワード引数のリストを得る方法とか容易されてたら便利でいいなぁと
結構ググったのでなさそうではあるんですけど、調べて「あった」場合はともかく「ないなぁ」の場合、やはり最終的には強者に聞いてみないとダメかなと ドキュメントをぶっこ抜いてその関数がどんな引数とるかのポップアップをエディタで出せばいい pyautogui
エラー出さずにできましたが最適ではない気がします
下記のやり方より良い方法があれば教えて欲しいです
①
pyautogui.write() でエクスプローラーのアドレスにパスを打ち込む時
日本語や \ が入力できなかったり、最初の C: が C* に勝手に変わったりしました
・pyperclip を使って値をコピーしてから、pyautogui.hotkeyで貼り付けました
②
pyautoguiを使って検索したりクリックしたりする時
・画像認識してから次の処理する時は、while pyautogui.locateOnScreen() is None: で time.sleep(1) させて
・検索結果表示とか全選択とか、少し時間がかかりそうな箇所は逐一改行して「time.sleep()」を書きました
これを書くのが結構あってcodeが余計に長くなりました pyautogui 便利だけどマウスとモニターが使用不可になるのだけは面倒でした
下のソフトの処理ができるなら別のもので構わないのですが、pyautogui以外でやってる人がいたら教えてください
・Adobe Acrobat
・Evernote ※Legacy版
・ソシャゲ全般(デイリー回収用) ahkで簡単なことはやらせてる
python化されたahkがあればいいのにと思っている sleepが面倒なら画像名を指定するだけで待ち&クリックする関数を作れば良いんでない
バックグラウンドでの使用は、昔VPCを多重起動して使ってたことあるけど今でも出来るんかな
昔、某MMOでプロセスメモリの内容を読み取って動くマクロとか作ったけど
プロセスメモリが読めればエスパーなマクロが作れるよ >>258
それでやってみます
ゲームに使えるならプロセスメモリもその内手を出しそうです >>252
VSCode, Ruby では拡張機能で、関数の説明なども見れる
また端末から、そういうコマンドを実行しても見れるけど、
ブラウザで見た方が見やすいので、
一旦コマンドで説明をHTML ファイルにしてから、それをブラウザで見て、
見た後に、HTMLファイルを削除する。
これが自動で行われる
ただし、その関数・モジュールの作者が、
Doc コメントみたいな決められた様式で、コメントを書いている場合のみ
たいてい、Doc コメントの説明などは、
パーフェクトRuby などのパーフェクト・シリーズ本に書いてある クリップボードにpathlibのPathで指定した、不特定多数のファイルをコピーをしたいのですが方法が分かりません
コピーするファイルは、フォルダー・テキスト・画像・動画・PDF関係なく、PC上で選択してCtrl+Cできるファイル全てが対象です
pyautogui.hotkey(“Ctrl”,”v“) を使って貼り付ける予定です。※Evernote Legacyというメモアプリ上で使いたい
pyperclip、shutil、pillow関連の記事は見つかるのですが、クリップボードに複数・拡張子問わずコピーする方法が見つかりません
どうすればできるのか教えてください 今のところPathにあるファイル名いじって、検索かけてから全選択して、pyautogui.hotkeyでコピーするという遠回りなやり方でしてみました FileDrop形式に変換できれば良いんだろうけどパッと検索してみた限り難しそうだね
VSを使ってクリップボードを監視してファイル名が含まれていたらFileDrop形式に変換するアプリを自作するか
コピー用のtempフォルダにファイルを一旦コピーしてから全選択→貼り付けとかでも良さそう >>263
FileDrop形式という単語を知れただけでも良かったです。ありがとうございます chm形式のヘルプが3.7までしか野良に無いんだけど、3.10(stable)のchmどこかに無い?
公式はDLしたいけど404でオンラインでしか参照できなくて困ってる >>265
公式にpython3107.chmあるし、落ちてくるよ >>266
すまん、日本語版希望。。。
githubに3.7jpビルドしてる人の使ってる >>261
漏れは、Ruby で、drag&drop での複数ファイルの移動処理を作ったけど、
これはファイルのみに適用される。
フォルダの再帰的コピーも出来るみたい
require 'fileutils'
dest_dir = "C:/Users/Owner/Documents/tmp/"
# ARGV は、ドロップした複数のファイルパスの配列
ARGV.select { |full_path| File.file?( full_path ) } # ファイルのみ
.each do |full_path|
file_name = File.basename( full_path ) # ファイル名のみ
FileUtils::DryRun.move( full_path, dest_dir + file_name)
end
sleep # 出力したコマンドプロンプト画面を閉じないようにする すみません、jupyter labで下記のように記述して実行したんですが、エラーでサイトが開きません。原因わかる方いらっしゃいませんか?
url = ''https://telegram.org/''
browser.get(url)
エラー内容
NoSuchWindowException: Message: no such window: target window already closed from unknown error: web view not found
browser.getをdriver.getに変えて試してもみましたがダメでした。
urlについてはサイトに飛べることをurlクリックで確認しました。 エラーメッセージの内容を切り分けて質問しろよ
エラーの原因はすぐわかるだろ
web view not found
まぁ、こんな状態でスクレイピングとかアホかって感じだけど >>272だけど今試したら3.10.8インストール出来た
https://www.python.org/ftp/python/3.10.8/amd64/ のフォルダの属性設定を間違えてたらしい
よって>>273は昨日の時点ではインストールしてないとすぐに分かるんだね import pandas as pd
df = pd.DataFrame(
[[10,"a", True],
[20,"b", False],
[30,"c", False],
[40,"d", True]])
#というデータフレームを定義したとして、0列目、2列目を独立して処理したとします
#これを最終的に結合したいのですが、
a = pd.DataFrame(df.iloc[:,0],df.iloc[:,2])
# というようにすると
0 1
0 10 True
1 20 False
...
というデータフレームではなく、
0
2
True NaN
False NaN
False NaN
True NaN
というデータフレームになってしまいます。なんで欠損値になってしまうのか
わからないのですが、求めるデータフレームを作るにはどういう結合方法をとればいいでしょうか。ちなみに、
p=df.iloc[:,0]
に対して
p["A"] = df.iloc[:,2]
という方法は、pがSeries型なので取れないです。一旦Series型にして取り出してから処理して結合させたいのです。どうすればいいでしょうか。 pandas詳しくないけど
a=df.iloc[[0,2]]で出来たお pandasはそれだけでスレ作ってもいいくらい複雑で深いな 二重のforループ抜けるときフラグを使ってるんですけどもっとかっこいいやり方ありますか?
for i in range(10):
flag = False
for j in range(10):
if hoge[i][j] == fuga:
piyo()
flag = True
break
if flag:
break for-else
for i in range(10):
__for j in range(10):
____if condition:
______break
__else:
____continue
__break
例外
try:
__for i in range(10):
____for j in range(10):
______if condition:
________raise Exception
except:
__pass
他には関数にして脱出はreturnとか 検索ならin演算子を使って1ループに出来そう
for i in range(10):
if fuga in hoge[i]:
print("piyo")
break
他にはnumpyのany使うとか
def is_contain(l, data):
a = np.array(l)
return np.any(a==data) よほどのクリティカルなイシューが解決されたのでなければ
アップデートされたからと言って、慌てて入れないもんだよ >>277
一回それぞれ個別のSeries型を抽出してからくっつけたいんです。 わかりました。Series型だと追加できないので一回一列だけのDataFrame型に変換すればいいみたいです。
a = pd.DataFrame(df.iloc[:,0])
そのあと、列追加で
a.loc[:,"new column"] = df.iloc[:,2]
とやれば追加できました。 こうかな
a = pd.DataFrame([df.iloc[0, :], df.iloc[2, :]])
print(a)
numpyになると[行, 列]になってややこしくなるのを思い出した >>281
breakしたらelse飛ばす挙動は知らなかったです
ありがとう l = list()
l.append(df.iloc[0, :])
l.append(df.iloc[2, :])
a = pd.DataFrame(l)
print(a)
見やすくするならこうやね、勉強なるわ >>274
WSL2+Docker使ってるからな
実機には入れない >>281
その三択なら読みやすさ的に
関数にしてearly return一択だと思うんだけどなぁ sr1 = df.iloc[:, 0]
sr2 = df.iloc[:, 2]
a = pd.DataFrame({"0" : sr1, "1": sr2})
print(a)
辞書型で登録
今度こそどや >>294
できました!辞書型なら列追加できるんすね df_merged = pd.concat([df.iloc[:, 0], df.iloc[:, 2]], axis=1) iloc()じゃなくてiloc[]の時点で、何しとるのかよく判らん 質問です。
配列内にアルファベットの要素がランダムに複数個入っています。
これらの要素をなるべく隣り合わないように並べ替えるにはどうするといいでしょうか?
例:AAABBC -> ABACAB >>299
なるべくっていう処理はコンピュータには不可能
きっちり仕様として示せる処理でなければならない >>299
隣合うのが不可避の場合どうするのか
前に溜めるのか後ろに溜めるのか
2文字ずつ並ぶ→3文字ずつ並ぶのように緩和するのか >>302
前後に貯めるのではなく、2文字ずつ並ぶ→3文字ずつ並ぶのように緩和できるようにしたいです。
例:AAAAAABBC -> AABAACABA AABAACABA はNG箇所が2だけれど、
AAABACABA にすると1箇所で済む
2連続2箇所よりも3連続1箇所の方がスコアが低くなる評価関数の定義が必要 こういうパズル的なのはプログラミングお題スレで出題する方が早く回答が付きそうだな >>305
n連続は1箇所につき2^n点のペナルティを課すとかは? >>306
いや、ていうかよく考えたらこの質問Python関係ないじゃんね >>308
すいません。
使っているのがpythonだったのでここで質問しました。
やはり難しいようなので、皆さんのコメントを参考に自力で考えてみようと思います。
ありがとうございました。 >>304
26要素のリストで各文字の個数をカウント
最大のものを見つけ出す
最大/他全部で連続個数が分かる
最大の文字を連続個数並べて他の文字を順番に挟む
挟む時は各文字の文字数をつじつま合うようにリストをカウントダウンして調整
同じ文字は可能な限り離したいとか条件追加するともっと難しくなる >>300
ちゃんと確認してないけど、交互に置けない場合が条件になるのかな?
不可能条件
最頻出文字数 > 文字総数/2
かな 文字の挿入は総数がつじつま合うようにもっと工夫が必要だな
まあ頑張ってくれ >>310
>>311
ありがとうございます。
試してみます。 >>303
「なるべく」は結果についての話
最短は手順の話だから違うよね ガチでなるべくなヒューリスティックな問題の方が現実には多い 思いつきだけど
[合計文字数][26]の2次元配列を作る
各文字ごとに均等に配置
空白部分には空白なりNoneなり入れる
2次元配列を縦方向に連結して1次元配列にする
空白を除去する
ってのはどう?
aaabbc
[a,n,a,n,a,n]
[b,n,n,b,n,n]
[c,n,n,n,n,n]
abcaba >>318
合計じゃなくて最大個数の文字数でいいな for文の途中で条件に当てはまったら、for文の任意の値から処理を再開させる書き方とかありますか?
例えば「for x in range(10):」とあったとして、7の途中で条件に当てはまったら、3から再開してそのまま最後まで処理するみたいな 処理で条件が変わるような場合は、whileにしてもハマる
いつ終わるか判らないようなループは本質的に不安定 >>320
そういうジェネレータ作ってrangeと置き換えればいいんじゃね あんま綺麗じゃないけど、こんな感じでいいのか?
競プロの連中ならもっとスマートなの書いてくれるはず
text = "aaabbc"
char = "abcdefghijklmnopqrstuvwxyz"
char_dict = []
for c in char:
____count = 0
____for t in text:
________if c == t:
____________count += 1
____if count > 0:
________char_dict.append({"name":c, "count":count, "left":count})
char_dict = sorted(char_dict, key=lambda e: (e["left"], -e["count"]), reverse=True)
result = ""
pre = ""
for _ in text:
____ci = 0
____while True:
________now = char_dict[ci]["name"]
________if now == pre:
____________ci += 1
________else:
____________result += now
____________pre = now
____________char_dict[ci]["left"] -= 1
____________char_dict = sorted(char_dict, key=lambda e: (e["left"], -e["count"]), reverse=True)
____________break
print(result) >>325
とりあえずcollectionsのCounterだけは覚えようか >>325
ありがとう
このソートって思ったよりも難しいな
ツリー構造は理解できねえわ >>299
https://ideone.com/b6vqgk
すごーく分かりづらいけど、2種類に分けて導き出した
区切り文字中心に考えたのに、そこで処理を分けてない体たらく
あと、同じ文字は出来るだけ遠く?は難しかった
〆切ってそうな話題ですまん、Python覚えたくてやってみた 質問です。
vscordとpycharmと他のパイソン系なのですが
「マルチグラボ」対応してるのを探してます。
お勧めはありますか? Windowsで作成した画像を外付けHDDに保存する。
※macとWindows共通で使えるFAT32使用
それをmacPCのpythonのglobで画像のパスを読み込んだ時に
「バスケ」や「ポケモン」などの濁点と半濁点の検索ができません。
※printで中身を見るとあります。
原因や対処方法がありましたら教えて下さい。 あれはあれでunicodeなんだよな
統一できてない >>335
ありがとうございます。
うまくできました。 >>299
これ貪欲法で解ける??
解けるならAtcoderのCくらいででそう Mac は「ハ + 濁点」「ホ + 半濁点」に分割しているのか
1文字にまとめるのが普通 昔からそうだったとかでもないのに
デファクトスタンダードに合わせるのは嫌というイキりたいOSの性格が現れている 半角カナを全角に変換した時に
文字数が変わるのを許容できるかという問題 >>299
https://ideone.com/7qVDRD
内包表記とスライスを使ってみた
・・・Pythonヤバすぎる、便利すぎる 単純なy1,y2の差ではなく、
y1がy2をcrossover(上抜け)したところの値とy2との差を、crossunderするまで取り続ける
y1がy2をcrossunder(下抜け)したところの値とy2との差を、crossoverするまで取り続ける
そのデータを取得したいのですが
何かうまい具合にできないものでしょうか
where使って切り替わりの判別はできたのですが
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
t = np.linspace(0, 10, 1000)
y1 = np.sin(t)
y2 = np.cos(t)
ax.plot(t, y1)
ax.plot(t, y2)
fig.tight_layout()
plt.show()
np.where(y1>y2,1,0) test = set(A[‘A1’] for B in C[‘C1’] for A in B[‘D’] )
ってどういうコマンドなんでしょうか。
入れ子が多すぎてよくわからず…
何がどう処理されてtestには何が入るんでしょう? test = set(...) は
https://docs.python.org/ja/3/library/stdtypes.html#set-types-set-frozenset
なんで置いといて中身の話だけど
A['A1'] の所を一時的に C B A と順に3回置き換えて動かすとみえてくるかも >>346
バラす場合は
test = set(A[‘A1’]
for B in C[‘C1’]
for A in B[‘D’] )
ここでバラすってことですかね? ゴテゴテになりましたがなんとかできました
https://ideone.com/huqmu0
#0.0 97
#crossover sin,cos 2
#crossunder sin,cos 1 >ここでバラすってことですかね?
>>348
フィルタリングしてるのはわかってるやんな? >>350
すみません
フィルタリングってなんでしょうか…? >>345
forループに直して読めばいい
test = set()
for B in C[‘C1’]:
__for A in B[‘D’]:
____test.add(A[‘A1’])
あまりいい内包表記の使い方ではない 差とったバージョン貼るの忘れてました >>349
https://ideone.com/yDQwqO
せっかくnumpyやpandas使っているのにforで回す感じが納得できませんが妥協します 直前のコマンドの実行結果の確認ってどうやるんですか?
shellで言う、echo $? をやりたい [{'id': 1, 'name': 'hogehoge', 'start_time': datetime.time(22, 0)}]
ってリストを
{'id': 1, 'name': 'hogehoge', 'start_time': datetime.time(22, 0)}
と言う辞書に簡単に変換する方法ってありますか?
クエリーセットから辞書に出来れば一番いいんだけど...。 >>357
cross地点のラインとか見やすくていいですね
実際に使うチャートのプロットに使ったら良い感じになりました!
ありがとうございます!! Wsl2上Ubuntu20.04でtorch使って機械学習させてたんだけど、3万イテレーションぐらいで
Segmentation fault
とだけ出て落ちてた
VRAMの容量が不足したと考えてあってる?
あとLinux環境でこれをデバッグするなら何がいいか教えて欲しい Linuxの組み込みRuby・mruby とかは、Top, Valgrind などを使うのかな? >>1
p = [0,1]
q = [2,3]
を
r = [0,2,1,3]
にまとめたい、、、 >>358
良かった。おめでとう
>>363
zipとflatten使えばできる、flattenは自前で書いても可 >>360
再現性あるかどうかは大事。ないなら電圧降下とか宇宙線とか回避できない事象かもしれない。
再現性あるならまずはメモリのテストとか? メモリ壊れててSegmentation faultは運良すぎる
十中八九バグ踏んでる >>360
まずは普通のubuntu環境でやってみな note.nkmk.meブログ書いてる人は一体何者なん?凄すぎでしょ .pyの拡張子のプログラムファイル送られてきたんだが
ひらきかたがわからん 単に開きたいならテキストエディタでおけ
よくわからんものをいきなり実行しないほうがいいでしょ。 返信ありがとう。
ココナラの仕事関連で贈られたブツだから
妖しくはないと思う。
ただひらき方がわからんだけw
テキストね。ありがとう! .pyだからgoogle colabとかvsでもひらけますか? すまんが、開発環境について教えて欲しいんだけどさ
NumPyの行列がどんな形してるか、あらかじめ推測がつく場合にVSCodeのエディタ上で表示してくれるような機能ってなんかないのかな?
あったら教えてほすぃ >>375
今グーグルコラボひらいたんやが。
ファイル、編集、表示、挿入などあるけど。
なかなかファイルを読み込むっていうのができひんねん。
教えて下さい! ファイル→ノートブックをアップロード→ダウンロードできひんw 当該ファイルをテキストエディタで開いてコピペしたらええんでないの? Pythonの乱数はCPUのbit長とあまり関係ないみたい
64bit= 8バイトや128bit = 16バイトが効率がいいのかとおもったが
一度にまとめて長いのを生成したほうがいいみたい
https://ideone.com/JlYdMk
import random
from time import perf_counter
def randcomp(byte = 4, loop = 100000):
N =[]
K =[]
for i in range(3):
K.append(2**i)
N.append (2**(8*byte*K[-1]) -1)
for i in range(3):
t = perf_counter()
for n in range(loop * int(4/K[i]) ): random.randint(0, N[i])
t = perf_counter() - t
print("%d%s : %0.3f sec" % (8*byte*K[i], "バイトで乱数生成" , t), flush=True)
print("同一長乱数はまとめて生成したほうがいいが分割したほうがいいか")
randcomp(100, 30000) >>382
https://docs.python.org/ja/3/library/random.html#random.random
> ほとんど全てのモジュール関数は、基礎となる関数 random() に依存します。
ソースまで追ってないけど係数掛けてるだけでない?精度求めないなら構わないけど 納得
整数の乱数も浮動小数点から生成してるのね
整数値はCPUの整数演算から生成してるとおもってた >>376
PyCharmのPro版ならそういう機能あったかも。まあ有料だけど 年3万かあ・・・・教えてくれたのはありがたいけどちょっとこれは・・・・ 量子使う奴は意思が入り込むよ
未来の科学ではそんなの当たり前になってるだろうけど、現時点ではオカルト
二重スリット実験とかも本当は不思議でも何でもない ほんとの乱数を使う必要がある場合と疑似乱数でいい場合は区別したほうが良くないか。
Pythonで出し分ける方法は調べてないから知らないけど。 seedを物理的に作ってあとは擬似乱数だな
組み込みだとADコンバータのLSBを使ったりする pythonの資格取りたいんですが難しいですか?
どれくらい勉強すれば行けますか >>365-367
wsl2上ではイテレーションはまちまちだけど再現してる
ノーマルなubuntu環境構築して再現性あるか見てみるわ 調べりゃ解ることを
わざわざ聞くやつは
2マン時間で十分だと言うことだろう 小さめファイルのハッシュ値を計算したい人です
ファイルIOにかかる時間のほうが圧倒的に時間食うことがわかりました
ハッシュ計算が3倍遅いほうでも差がほぼないようです データフレームのある列で、0が連続する値だけを起点にデータを分割する
いわゆるビニング処理をしたいのですが
こういう感じにしました
https://ideone.com/JIk4Zz
たぶん期待通りの処理(df_sample["b"]で0以外の値が連続するブロックだけ抽出)になったのですが
改善できないでしょうか >>399
君には難しいだろう。
たぶん無理だから諦めた方がいい。
Pythonは統計とマシンラーニング課題も出るからそれらの背景知識がなければ受からないと考えたほうがいいし、Pythonを学ぶ意味も意義もなんの価値もない
というのと、そんなことでいちいち根拠は?と思考停止する程度であればなにも成すことはできない。
よってそれら含めて知識として習得するつもりがあり、そのはじめの一歩として資格試験に挑戦するというのであれば、勝手に挑戦すればいい >>399
マジで厳しいこというかもしれないが
何のためにその資格を取りたいと思ったのか
何のためにPythonを学ぼうと思ったのか
心から学びたいと言う欲求があなたの中にあるのか
あなた自身がこれら命題に答えられなければ、時間の無駄になるだろう Pythonは一般人でも使いやすいからシェアNo.1になってるような言語でしょ
ラズパイIoTでも使うしAIのためだけの言語では無いよ ひろゆきは自分で試していない。
検索して、それを話しているだけ
自分の経験に基づかないから、いつも話が浅い。
だから聞くだけ、時間の無駄
検索して分かるような事しか話さない
Python は良いみたいですよ。
流行っているからとかw Python は文系は無理。
大学院数学科か、AWS 機械学習の資格が必要
だから、YouTube で有名な雑食系エンジニア・KENTA とか、
たにぐちまことも、Pythonの動画を作れない
だから、英語だけできる文系女は皆、Ruby on Rails へ行く。
Railsは算数で十分
Pythonの文法だけ知っている香具師は、いらない。
仕事ができないから フランス語で講釈たれたときもそうだな
フランス語の専門家が誤りに突っ込んできて
それで黙ってしまった ケンタって人pythonをスルーしてるのはなぜなんだろう KENTA は文系でしょ。
TOEIC も、800点以上取っていたかも?
英語ができるから、10言語以上のプログラミングに強い
でも、Python は別。
大学院レベルの特殊な勉強が必要だから、文系では無理 うーんニューラルネットワークってそんなに難しいことしてないんだけどな ニューラルネットワークはともかく、他の言語出来たらPythonだって出来るでしょ。NumPyとかPyTorchだけがPythonじゃないし。なんか知らんYouTuberを根拠にするとか頭おかしすぎる 正直BASICみたいなもんだろ、 PythonはCとかで作れられたソフトのラッパーにすぎないだろ
元の操作が難しくても初心者向けにラッピングしてあるんだろ
BASICみたいというのはその面あるかと
当時だとアセンブラのラッパーといえるだろうが Pythonで記述法が独特だとおもってたけど
いま高級言語の FORTRAN BASICを調べたらまあまあ似てた とにかく手軽で便利、マルチプラットフォームで動く高機能なスクリプト言語
一般人から研究者まで、エンジニアじゃなくても手軽に扱えるシェアNo.1のプログラミング言語
さあ今すぐPythonを始めよう! やる気次第でしょ
インフラ屋さんだけどPythonとGoがあれば仕事が楽になる 生まれて初めてカキコします。
pythonでエクセル内の
指定したセル範囲を画像として保存することはできるのでしょうか?
openyxl等の使い方を見ましたが該当する機能が見つからず。。。 カキコって何歳だよ
画像は難しそうだよな
ブラウザ経由ならまだ割となんとかなるかもしれんけど xlwingsでExcel操作してセルを表示
https://learn.microsoft.com/ja-jp/office/vba/api/excel.range.copypicture
もしこの操作ができるならpillowのImageGrab.grabclipboardで画像化
できそうにないなら同じくImageGrab.grabでスクショ >>426
5chははじめてか、力抜けよ
画像は難しい(意訳: 無理とは言ってないが見当がつかない) >>424
そんなことを逝っていたらいつまでたっても創められない
なんでもいいからすぐにやれ! >>425>>431
わかった、明日本屋さん行ってくる。 >>424
無理
そういう質問してくるやつは全員使い物にならなかった 独学で行ける奴は独学で行けるかどうか質問する前に独学できる範囲は独学しちゃうからなあ。
その質問が出る人と出ない人の違いが不思議だよね。
子供の頃に近くに誰も教えてくれないジャンルで何かを自分で調べてやったかどうかの違いなのかなあ。 全くのプログラミング初心者はCとJavaをやってからPythonやるのおススメ
するとCでポインタに挫折し、Javaでオブジェクト指向に挫折するはず
次にPythonをやると大幅に難易度が下がり感激して習得が進む 独学ってなんだろうなとは思う
今やネット使えば相互で学びを得られるわけだし できるやつはそんなくだらない質問してる間に書いてるからな
よほど頭が良いやつを除けばプログラミングなんてスポーツに近い
ある程度書きまくって理解するという面がかなりある >>432
素直でよろしい
わからないことがあったらすぐにここで聞くがよい、少なくとも私は答えてあげよう PythonのpyautoguiでDMMGAMEPLAYERのクリック操作ができません
多分他にもできないソフトや操作がある気がします
できるようにする方法をご存知の方いませんか? 管理者権限でPythonやVSCodeを動作させるというのはやってみましたがダメでした
それとは違うものですか? クリックスピードが速すぎて認識しないことあったけどそれとは違うかな 循環参照とグローバル変数の解放忘れは
どうにもならずでよい? >>441
それなー制御レイヤでガードがかかってて出来ないんだよ
仮想環境でプレイヤー動かして外からマウス操作するとできる
ahkならうまくいくと昔見た気がする 昔MMOでマクロ動かしてたときにjoytokeyは通るのにUWSCが通らないのは何でだと思ったらJoytokeyは使ってるAPIが古かったのを思い出した GUIは他で作って呼べばいいやとか思ってたけど
触ってみたら楽しくなってきちゃった… 自分で使うのは勝手だが、他人に無理に使わせようとして面倒をかけないようにしろよ パイソンって何のOSで作って、何のOSで動かして
どんなハードウェア使ってるのかイメージわかない 昔はアプリ内スクリプティングによく使われてたし
そこまでOS依存ないよね >>450
何のOSでと言ってる時点で適性無さすぎ 渋谷のOSは人気があったんだけど、なくなってしまいました >>455
いやーこの辺の理解は難しいよ
俺はPythonがC言語で作られていることを知っているが
C言語が何で作られているかは知らない >>458
大本の大本を辿ればハンドアセンブルに行き着く
始めは機能が限定されたCコンパイラを作り、だんだん必要な機能全てが揃ったCコンパイラを作る >>461
Cコンパイラが何でできているか知っているのは
コンパイラを作った人だけだからね
君は作ったことあるのかい >>462
gcc知らず?
clang知らず?
cl知らず?
何でできてるかって実装言語?
gccならCだよ
clangはC++
clは詳細はわからんがC/C++でしょう キーワード引数の違いで引数cがあるときだけ下側を呼ぶような関数オーバーロードってできないんですかね
def myfunc(a:int,b:int)
def myfunc(a:int,b:int,c:int) >>463
gcc はカバのダンスの調教に疲れて c++ になったかと ラズパイを動かすための言語って思ってる人もいるかもしれない >>463
それはそう言う例があるってだけの話
テキストを読んでバイナリを出力できる言語なら(面倒かどうかは別にして)コンパイラを作れるだろ >>468
念の為に聞いておくけどC言語はC/C+でないと作れないとか思ってないよね? >>470
何を言ってるんだ?
支離滅裂だぞ
Cコンパイラの作り方を知りたいのか?
字句解析、構文解析、意味解析、コード生成、最適化とかを知りたいのか?
コンパイラの教科書でも読めば?
ちな俺は大学でその辺やってたから教えても良いよ Cコンパイラ作りたいなら湯淺太一先生のコンパイラの教科書読みな
この本は昔大学で使っててアセンブリ言語のコード生成までちゃんと書いてある
著者はLisp処理系とか作ってた人
この本読めばRustがどういうコード生成してるかもわかる >>471-472
御託はいいから>>470にyes/noで答えろよ >>473
なんでCでしか作れないんだよw
おちょくるのもいい加減にしろ というかマジでわかってない?
コンパイラとリンカとか知らんのかな
それなら謝るけど あまりに前提知識が無さすぎるが故に煽りっぽくなってしまったのなら俺の責任だからそこは謝るよ どうでもよくないよ
コンパイラのこと知らずにRust書いてるならかなり怖い PythonのスレでRust書いてる前提で話すほうが怖いわw >>479
ん?あ、すまんw
リアルに勘違いしてたw
アスペ出たなあ ほとんどのスレが閑古鳥だからかスレチでも書きたい欲求が上回るんだろうね ただpythonでC/C++拡張を書く場合には普通に有効だし
知っていて損はないと思うけどね
スレ違いスマソ >>474
お前には聞いてないからいちいち絡んでくるなよ... アウアウウー Sa45-sGwS、ワッチョイ 81f0-sGwS
は同一人物でしょ
スレ違いだけど、こっちの流れのほうがわからん
462の発言に対して463が否定した
その後の467が???
>>462 テテンテンテン MMe6-zh4g
> Cコンパイラが何でできているか知っているのは
> コンパイラを作った人だけ
>>463 ワッチョイ 81f0-sGwS
> gccならCだよ
> clangはC++
>>467 ワッチョイ 8201-yYWu
> それはそう言う例があるってだけの話
> テキストを読んでバイナリを出力できる言語なら(面倒かどうかは別にして)コンパイラを作れるだろ >>484
だからC言語(のコンパイラやインタプリタ)はC/C++言語でなくても作れるって話
>>463 は単なる一例
もちろんPythonでも同様 >>485
一例ってことは、
462に対して例をあげて否定した463を肯定しつつ、新たな話題で絡んだってことよね
463以前でもそれ以降でも「C/C++以外では作れない」なんて言ってないのに >>486
どうやったそんなアホな解釈になるんだよw
462 はコンパイラ一般の話を書いてるのにそれに対して個々のコンパイラの例を挙げても否定にも何にもなってないって話だぞ >>487
>>462 コンパイラ一般の話と
>>463 いくつか例外があるぞと
>>467 いくつか例外をあげても意味ないぞ
こういう流れだったか
> テキストを読んでバイナリを出力できる言語なら(面倒かどうかは別にして)コンパイラを作れるだろ
んで、2行目のこれは「どこに」かかってるんだ? >>488
頼むから書いてもない例外とかいきなり出してこないでくれ
> んで、2行目のこれは「どこに」かかってるんだ?
いくつかの例以外のものを作れるだろって話 例外 → 一般とは違う例
と読み替えてくれ
その作られている例と作れる話が繋がらなかったんだ
とりあえず流れは理解したわ
横槍すまんかった >>490
> 例外 → 一般とは違う例
> と読み替えてくれ
意味不明、487の一般の意味がわかってないだろ...
全般と書けばわかるかな? そもそもPythonもC言語で実装されているとは限らないしね。普通はCPython以外のことを考えなくていいと思うけど、今でもpypyとか使おうと思ったら考えなくちゃだしな(使ったことないのでよく知らないけど) c++で思い出したんだけどboost.pythonでndarrary渡したあとそのままndarrary操作してたら処理にアホほど時間がかかったわ
結局vectorに入れ替えて処理したあとpythonのリストに変換して戻したら早かった
今思えば最初から渡すのリストで良かったな
ndarray渡す利点なんかあるのかな? >>494
コピーを減らせるのが利点だけど、アクセス時のチェック等で遅くなったら意味ないのでポインタを使う。
コピーをするにしても、ndarrayのデータは連続してるのでリストより速くなると思う。 初めてvsコードに触ったんだが
pyhtonのバージョンはどうやってわかるんですかねー
教えて偉い人! September 2022 (version 1.72)
これのことかな?
すまん。よくわからんw >>495
データが連続してるからリストより早いってのはありそう
昔のコード発掘できたら試してみるわ >>496
右下に表示されてる
そこクリックしたらインタープリターを選択っていうのがでてくる >>501
右下だとこうなります。
imgur.com/a/6CZm37Y
なかなかに初心者には難しいです。 あ!できたっぽいw
python3.9.0ってでてきた。
これかな? 半島系のクズは皆殺しでOK
日本に来て強姦と窃盗を繰り返す極悪非道の朝鮮人 >>497
RubyやPHPで使われてるから普通に現役だよ
手書きだとCFGから左再帰の除去だとか
先読みトークン数の問題とかすげー面倒だから
初心者はまずbison使えば良いんじゃないか 質問です
この引数は普通関数と可変引数ですが
この関数を簡単にする方法ありますか?
5個以上の場合も全部記述するしかないですか?
def connect(F, *x) :
l = len(x)
if l==0 : F()
elif l==1 : F(x[0])
elif l==2 : F(x[0],x[1])
elif l==3 : F(x[0],x[1],x[2])
elif l==4 : F(x[0],x[1],x[2],x[3]) >>506は
消費メモリと消費時間を計測するベンチマークの補助関数としてつかいたいのですが >>508
サンクス
F(x)で駄目だったですが
それでいいんですか FastAPI気軽に使えて良いわ
自動で/docs作られるからUI作んの完全に後回しにできる
ついでにSQLModelも、と思ったけどrelationship周りがエラー出たり出なかったりおかしかったが原因がわかった
SQLAlchemyのバージョンが最新のものだrelationshipが効かない、1.4.35だといける・・
あとCRUDの並行処理は無理ぽいかも。
これらさえなければ個人でさくっとお気軽にウェブアプリ作るフレームワークとして完璧なんだが ちょんてさ、半島に帰れば差別されないのに絶対に半島に帰らないよね?
それは、日本が平和で豊かで、
日本人はみな親切だからです。
なのにちょんは差別されてると妄想をいだいて
日本人女性を強姦しまくってる!
ちょんは皆殺しにするしかない! 半島に絶対帰らないちょんw
日本人は犯罪者に親切し過ぎる! Python初心者ですが新事実を発見しました
クラスのメンバ変数はデフォルト値が設定してあっても
コンスタントラクタで初期化しないかぎり、別に生成したクラスobjと共有されてるようです
リストとか特定の変数限定かもしれないですが 具体的にこれですが
class A :
L = []
def __init__(self): pass
class X :
L = []
def __init__(self): self.L = []
a = A()
a.L.append(7)
b = A()
print(b.L) # 新規生成なのに値が入ってる
a = X()
a.L.append(7)
b = X()
print(b.L) # 正常
print(a.L) # 正常 >>525
pythonから入った者には
そらそうだろとしか思わないw
たぶんオレは他言語扱えないな 他の言語でも同等の機能を持つものはあるけどpythonはどちらの変数なのかを明示しないから混乱し易い どっちも同じに見えるのはその方が便利だと思ったんだろうか
必要なら使う側で見分け付くように名前を付ければいいという柔らか運用 >>531
> どっちも同じに見えるのはその方が便利だと思ったんだろうか
変数宣言をしないって言うポリシーなので最初に使った場所で決めるようにした/せざるを得なかったじゃないかなって思ってる
> 必要なら使う側で見分け付くように名前を付ければいいという柔らか運用
使う側はそれでいいけど宣言する人が勘違いしてたら意味ないわけで... つい最近同じように、クラスを覚えようと
「python class」でググった一番上のサイトにやられた
https://camp.trainocate.co.jp/magazine/python-class/
クラス変数もインスタンス変数もめちゃくちゃだった クラス変数をself.でアクセスしない運用にすれば取り敢えず解決 self.__class__.foo
self.FOO 質問です。
requestsを使って画像をダウンロードする時、
一定のサイズ以下の物をダウンロードしないようにしたいです。
どのようにするといいでしょう? >>536
どうすればいいって
自分で質問して自分で答え言ってるじゃん streamを有効にして、ちびちびと確認しつつ取得 >>539
つまり一度ダウンロードしてからcv2等でサイズを確認し、
OKならリネームして保存、NOなら削除
という感じでしょうか? requests ファイルサイズってググれば一番上に出てくる サイズって、実データのサイズじゃなくて画像のピクセル数とか色のサイズってこと? 画像のサイズっていう文脈なら俺はim.sizeとかを想定するなー
request文脈なら容量のサイズだけどな! すいません。
質問の仕方がまずかったです。
画像の横幅とか縦幅の方のサイズのことです。
横幅350px以下の画像をダウンロードする時に除外したいのです。 まあフォーマットによっては頭だけ読めばわかるけど… 元々はサイズなんか判らん、というプロトコルがあって、
それでは不便だからと建て増しで追加してるから、
判る場合も判らない場合もあるんだよな
判ったとしても嘘をついている場合もある >>547
なるほど
そんな事情があるとは知りませんでした。
オンライン上でサイズを調べるのは無理そうなので、
一度ダウンロードしてから仕分けるようにします。
ご迷惑をおかけしてしまいすいません。
ありがとうございました。 パッとヘッダ見た感じjpegなら0xA3にWORD値で高さ、0xA5に幅、どちらもリトルエンディアン
pngなら0x10にDWORD値で高さ、0x14に幅、リトルエンディアン
って感じだね
上手くヘッダの一部だけダウンロードして画像サイズを得る関数を作ればトラフィック軽減になるかも? デザインパターンのSingletonパターンって必要ですかね・・
結局なんらかのカウンターで一元管理することになりませんか・・ バイトコードってヒープ領域に格納されてvmに渡されるのですか? >>549
ビッグエンディアンね
jpegは画像サイズが含まれるセグメントの位置が固定ではないので決め打ちは危険 >>552
そうです
内部的にはPyCodeObjectという形で実装されています >>524
他言語触ってて
先に型ヒントつけて宣言しとこで同じ間違いしたわ >>553
本当だ逆に覚えてた恥ずかしい
JPEGはサイズ前の5byteが共通っぽかったから>>550ではFF C0 00 11 08を検索するようにしてみたけどFF C0後の3byteは可変っぽいね
そもそも1KB以内にサイズ情報があるかも分からないのか 不特定の文字・数字・記号、またそれらの組み合わせを意味する表記で記入する方法を教えて下さい
[123456aaaあ井う~〜」
↑みたいなのがあったとして、数字や文字は毎回変わる、場合によっては桁数が変わったりもする
テキストファイル内で上記のパターンの文字列を見つけて、その前の位置で改行を入れるみたいなことをしたいです
イメージですが下記みたいに表して a に代入しておいて
[123456aaa文字] → [%%% ¥¥¥¥¥¥¥¥] or [%(桁数)¥(桁数)]
replace(a,”/n”+a) でテキストファイルを書き換えるようなことって可能ですか? これは煽りではなく真面目なアドバイスなんだが、プログラミングより国語を勉強した方がいい
その言語能力だと難しいと思う 222tq2tq2tq269ああ%64agaoiwahaio.59gagagahai3a.t69a 5>22gahaiiha
この文字列を
222tq2tq2tq269
ああ%64agaoiwaha
io.59gagagahai3a.t69
a 5>22gahaiiha
この出力結果にするにはどうすれば良いですか? なら大丈夫ですかね?
この場合だと「文字列2つ + 記号1つ + 数字2つ」のパターンを見つけて改行したい じゃあそのパターンで改行すれば…
正規表現でいいんじゃないかな >>567
その正規表現の表記の方法がよく分からないです
123abcdeあいう
↓
“\d{3}\w*.{3}”
これじゃダメみたいで、どう表記するのが正解なのか分かる方いたら教えて欲しいです 正規表現の勉強がてらやってみた
https://ideone.com/vPYWtM
最後の1行はマッチしないね 表記自体は合っていたのですが、re.match()でやってたせいで出力されなかったみたいで、re.search()に変えるだけで解決しました matchは使わずに
search(r'^なにか')
でいいよな
fullmatchは^と$で
^や$を使うなというのであれば、$だけ使うパターンも整備されていないと不完全 正規表現に関してはrubyやperlみたいに演算子にしてしまうのがベストだと思う
searchだとかmatchだとかregexpだとかmatch_allだとか覚えられんて 命名とかAPI設計がイケてない
match、search、fullmatch・・・
たまにしか使わない人は諦めて毎回リファレンス参照するしかない list.append()が破壊的だったかすら忘れてぐぐる 覚えられないのではない
覚えないという選択をしているのだ
覚えるために何か工夫したのか? イテレータ判定されるのにfor できないんですが
イテレータとはforができるものではないんですか
X = type("")
if hasattr(X, '__iter__') :
for x in X : pass 覚えないといけない時点でおかしい
理解すれば覚えなくていいのが正解
list.append()は破壊的で、str.replace()は非破壊であることに、
合理的な説明は無い
その方が便利なことが多そうだからとか、メモリの都合とか、
一旦そう決めちゃったからとか、そんな理由に過ぎない list.appendは配列の終わりにつけるだけ
str.replaceは配列の途中に差し込む可能性があるからでは?
メモリ操作のコストが違うじゃん 配列が格納してある後ろに空きスペースがたくさん確保してあるならそうだろうけど
で、コストが実際に違ったとしてもそんなことは知らんがなでしかない みんな知ってることだけど、listはmutableでstrはimmutableだからだよ。
これでもう各関数が破壊的かどうかいちいち覚える必要はなくなったね! listはある程度後ろに確保してるしコストが実際に違ったらそれは明確に合理的な理由でしょ >>585
これ
まあそういうものとして覚えるしかないわけだけど べつに目的の物が作れればどうでもいいんじゃないの?
ミッションクリティカルなモノをコレで作ったりするのかな? linkedなリストは関係ないよな
連続したメモリに入ってる配列的なやつはアレだけど PyObject*の配列です
PyObject **ob_item; // PyObject*の配列
Py_ssize_t allocated; // アロケートされてる個数 0から255までの数字が入った要素数1000の配列があって、
Cだとunsigned char list[1000];
みたいに宣言してlist[i]で参照するとアドレス計算で値を取ってくるけど、
pythonはどうやってるの? ちょっと調べた限りやっぱりPythonのリストはポインタの配列だと思うんだが違うっていうなら何か教えて
insertの遅さとかで連結リストではないとは思うけど cpythonのソースはマジで読みやすい
Rubyとかもうぐちゃぐちゃしてて読めねえもん 実際の配列のサイズはPyObject_VAR_HEADマクロのob_sizeに入ってる listにappendすると、ポインタの配列の末尾にポインタが追加される
配列のサイズが変わるので、サイズを増やした配列を作ってコピーしないとできない
筈なのに、idを調べると変わらない
**ob_itemに入ってる値は変わるけど、**ob_item自体のアドレスは変わらない
ということ? 組み込みだから作り直した配列にidがコピーされてたり VM上は指すオブジェクト変わってないのにid変わったらあかんでしょ appendしても同じオブジェクトという時点で違和感があるんだよな
明らかに別物やん
仮にappendが非破壊で
list = list.append()
とした時にidが変わる方が納得できる >>605
逆だよ
ob_item自体は大きさが変わる時にreallocでアドレスが変わるけど
中身の方はポインタをコピーするだけだから変わらない >>609
そもそもが全部Cで実装されてるんだからそういうメモリモデルなんだ、という理解で良いと思うよ >>611
あなたは何もわかってないのは理解できました >>613
わかんない?
違うよ
どんどん主張が後退するんじゃねえかなという期待の下、繰り返すけど リンクリストはリスト的なものを作るときに第一の選択肢としてはこないと思うよ。
任意の要素へのアクセスがO(n)かかるから。
必ず頭から順番に読んで、途中に挿入したいことが多いとかいう状況だったら使うけど、こういう特性を、癖があると思う人の方が多いんじゃないかな。
そういうコンピュータサイエンスの初歩みたいなところの実装が気になるなら、Javaを勉強してみるといいかもね。
リストも辞書もセットも、複数の実装方法が標準で用意されてて明示的にどれを使うか決めなくちゃいけないから。
そう考えると初心者にJava教えてた頃ってコレクションで付いていけなくなり勉強を諦めた人多いんだろうか。 >>609
夕飯を食べる前の自分と食べた後の自分は別のインスタンスか?って問いにyesと答えられるならばイミュータブルなものにしかidを付けてはいけないと考えているのだろう(そういう言語もある、Haskellとか)
そうでなければ、ミュータブルなインスタンスはミュータブルなんだからidが同じでも中身は変化すると考えるべきだろう idってCでのアドレスそのものなんでしょ
実装の都合でアドレスが変わったらidも変わるというだけの話で、
何らかのポリシーみたいなものは背景に無いような >>617
CPythonではな。(すみません知りませんでした)
しかしGCがかかりまくるVM上で動くPythonの実装もあるから、CPythonではそうっていう認識に留めておいたほうがいいんじゃないかなあ。 idが変わる/変わらないとミュータブル/イミュータブルは一対一対応? >>619
まず、イミュータブルというのをどう定義するかによると思うけど
(タプルはイミュータブルだが、タプルの中にリストを入れた場合、リストほミュータブルで、リストに変更を加えてもタプルのインスタンスが新しくできるわけではない)
そういうややこしい例を除いても、
イミュータブルならば、値を変えたらidが変わる
値を変えてもidが変わらないならミュータブル
しか言えないんじゃない? 定義や実装で何がミュータブルかがころころ変わってはいけなくて、
pythonではどんな環境でも同じものがミュータブルであるべき
で、idが変わる/変わらないが環境依存ならば、idとミュータブルは関係ないことになる pythonの辞書ってc++のmapと違って内部でソートされてないからアクセス遅いっぽいんだよね
keysで取り出しても登録した順だし
文字列でも数値でもキーにできるからそういうものなのか >>615
最後尾への追加削除がO(1)だったからリンクリストだと思ったけど
リアロケートの実装でどうにかそれっぽくなるんだねぇ
全く気にしてなかったけど、勉強になったわ ループで一つずつappendしていくようなコードは、
溜めておいて一気にどーんで高速化できそう Elixir なんて片方向リストだから、先頭の要素の追加・削除のみ速い。
末尾では全要素をたどる
Ruby は両方向リストだったかな? >>623
pythonの辞書は順番を保持することが仕様で規定されてる 3年くらい前からだっけ?
キーバリューやから順番気にしたことなかったわ 順番が同じだとセキュリティの問題があるから意図的にランダムにしてなかったっけ >>624
C++のvectorとか、JavaのArrayListの典型的な実装だと、リアロケートが発生するときに倍ぐらいの領域を予め確保しておく、ってのが普通って読んだな
コードレベルで読んだ訳じゃないから確たるエビデンスがあるわけじゃないけど。 辞書は3.5だかそのぐらいで入れた順になるように仕様が決まったよね
それまではバラバラだったはず
あとソート済みが欲しいならsortedcollectionsがあるんじゃないの
Pythonでパフォーマンス気にするようなコード書いたことないから速くなるかは知らないが
パフォーマンス気になるならもう普通にpybind11よ isPrime(n: int):
__for i in range(2, n//2 + 1):
____if (not n%i):
______return 0
__return 1
numPrimes = 0
for i in range(2, 250001):
__numPrimes += isPrime(i)
print(numPrimes)
cとかだと5秒以下で終わると思うんですが
pythonではどうやって高速化できますか? エラトステネスの篩みたいなまともなアルゴリズムを使え >>635
range(2, n//2 + 1) を range(2, int(n**0.5)+1)
にするだけで速くなると言うのは違うか。
n**0.5 は math を import するのが面倒だっただけ。。。 >>637
言語間の速度差を埋めたいという文脈で
片方により効率的なアルゴリズム使えというのは筋が違うと思う
それやったら相手のCも早くなるやん それはそうだけどPythonをできるだけ速くしようというのは徒労に終わるんだよな >>640
> 言語間の速度差を埋めたいという文脈で
そうか、単にPythonで高速化したいだけに見えるけど?
> pythonではどうやって高速化できますか? >>635
そもそもこのプログラムは一行で済む
print(sympy.primepi(250001)) 公式のドキュメント読むと
「pip は推奨されるインストーラ・プログラムです。 Python 3.4 からは、 Python バイナリ・インストーラに最初から付属するようになりました。」
とか見るけど、触る環境どれも最初からインストールされてた試しがなくて手動インストールばっかなんだが >>648
どこのバイナリインストーラ使ってるの? >>648
たぶん入ってるけど実行ファイルのパスが通ってないんだよ debianとかはOSのスクリプトを実行するための環境なので
最小限になるようパッケージが分かれている
不便にみえるけどユーザが使う場合はパッケージ外で導入した方が
特定のバージョンも好きにえらべてシンプル npm/yarn, Ruby のbundler などは、デフォルトでコマンド実行できるけど
多分これらは、デフォルトで環境変数PATH にあるフォルダにインストールされるのだろう >>648
python -m pipするのが安全やで(pipコマンドだと、複数バージョン入ってると意図したpythonに紐づいてないpipが実行される場合がある) pythonつかって紙に書いた文字判別するとかって簡単にできますか? >>655
無料のライブラリなんかありませんかね?無いんなら諦めます >>654
判別とはどういうことをしたいのかよくわからんけどとりあえず python ocr とかでぐぐればいいんじゃね?
https://gammasoft.jp/blog/ocr-by-python/ pythonでなんかかっこいいことがしたいです
でもやることが見つかりません。どうしたらいいですかね
今までポイントサイトをseleniumで自動化したりdiscordのbot作ったり動画編集自動化したりしてきたんですが先というか続きが見えません PyPIザッピングして良さそうなモジュールみつけてかっこいい応用を書く ラズパイでIoT
リアルの物を動かせると、やれる事の幅が広がるよ >>660
壁に落書きしてくるのがかっこいいと思ってるんなら大間違いだわw PyPIで良さそうなモジュール見つけるってどうやるの?
PyPI サイト見てtrend moduleみたいなの適当に選んで説明見ても詳しい使い方がわからない 電子工作もそうだけど、環境は整いすぎに整ってて、やりたいことがあれば何でもすぐにできる
でもやりたいことが見つからない
さてはみんな環境を整えることを目的にしているな アホな質問だな~
まずやりたいことがあって、それからツールを探すものだろ その通りだけどやりたいことが見つからないんだわ
もしかすると勉強からの逃避のためにプログラミングという逃げ場を作りたいのかもしれない。やりたいことが自然と出てきたらやることにするよ >>654
EasyOCR は?
pytorch必須だが 使い物になるOCRはみんなAIで有料なんだよな
客はDXしたい企業だから高い 料金みたことある?業務で考えたらめちゃ安いとおもうが 有料OCR知ってる俺スゲー君なんて相手にすんなよ... OCRしたい書類なんて有限だから、あらかた終わったら需要が無くなる
そしたらgoogle様が無料開放してくれる筈 AIだから教育が必須で、それなりにコストがかかる
こんなもんは公共事業で、どこかが代表してやって、コスト回収できたら無料化する
各国で自分のとこの言語についてやるのが筋だけど、
どうせ日本はやらないのでgoogleがやる 似たようなので、音声からテキストへの変換も金かかる
あれが無料で出来たら過去の膨大な音声や動画の資料が検索したり分析可能になって、
文化が大きく前進するだろうに金がブレーキかけてる
国の事業としてやれば一人頭の負担なんて微々たるものなのに >>677
つまり文字起こし言いたいんだろ?
なんかクソ認識悪いAPIだったら何かあった気がする 有料と言ってもgoogleAPIってかなり安いと思うんだけど
手持ちの本数十冊OCRして1,000円いかなかった気がする 某有名ゲーム会社で働いてる友人が、「Pythonではあまりクラスを使うべきではない。
それほど高度なプログラムでなければ関数を使えばいい」と言っていたんですが、
そうなんでしょうか?
皆さんの意見を聞かせて頂きたいです 関数でできればいいけど、引数たくさん渡したり、グローバル変数で渡してたり、
みたいな汚いことするくらいならクラスがいい Javaのようになんでもかんでもクラスを作る感じじゃないというのは事実。
でも、dataclassとかnamedtupleとかは使うかな。
とはいえやることによると思う。 状態を持つオブジェクトを扱うならクラスは必然なのでは pythonはメンバ変数にself必須なのがダルい
メインプログラムまでクラス化する必要はないと思う
規模が小さければモジュール変数をグローバル変数のように使うのが便利
vscodeならインテリセンス利くし >>687
プログラム水準(?)の高低でなく、実行速度の遅速でそう言われるのを聞いたことはある。大昔ね。
事実かは知らぬ。 >>687
使うべきでない理由をなぜ聞かなかったのか?
それを書けば話は終わる
君の友人ほどスキルのある人はここにはいないからな >>687
必要になるまで不要なもので汚すな
シンプルに書けってことかと >>691
だなselfを二文字くらいの別名に出来ないのかな? perlから来たからselfは当たり前だと思ってる 開発者間で同意取れるなら
ただの関数の引数だから好きに変えられはする グローバル変数用のファイルを作ってas gでインポートってのをqiitaで見たけどかなり便利
g.nameみたいにアクセスする それは他に影響しないというだけで、グローバル変数の欠点は何も解決しない
作って使ってすぐ捨てるならいいけど、保守が必要なら時間かけてシンプルにしとかないと グローバル変数はプログラム全体を通した設定値とかに使うもんじゃない?
それこそメインプログラムにとってのselfよ
変に引数取りまくるより可読性高いと思う
規模にもよるんだろうけど configを読んでグローバルに格納してmain()を呼ぶ
みたいな作りになってるのが多い
うちのスクリプト 設定値の保持ならぜんぜんOK
状態を丸見えで管理できないとこに置くなってことでしょ 関数の中に下請け関数があって、
なんかごちゃごちゃしてきたからリファクタリングだと外に出したらスコープから外れたので、
じゃあみんなグローバル化したれ、みたいにglobal付けて誤魔化す >>687
どうせ、いたずらにclassを多用したゴミトランプゲームを
見せたんだろ?いつまでも練習だからって言って、設計もしないで
ゴミコードを見せ続けるから嫌われかけてるんだよ。 クラス化するのは、言語のタイプやプロジェクトの規模ではなくて
データ同士の相関を元に、見通しをよくすることが目的だと思う
あるいは自分用ライブラリとしてカプセル化しておきたいとか
そういう話を置いて、やらない方がいいレベルの問題があるのかw >>687
おまいは友人に言われた事を何でも信じるのか?
この洗剤飲めるの。by アム・○○ぃ 匿名掲示板で聞いて得た答えを信じるというのもどうかと思う レスしてくれた皆さんありがとうございます
参考にさせて頂きたいと思います
>>689
CUIの簡単なカードゲームではどうでしょうか?
>>693
失礼しました
曰く「クラスを下手に使わない方がコードが無駄に複雑にならなくてよい」
からだそうです
>>694
まさにそんな感じです
>>698
ちょっと彼に悪いかなって…
>>707
ゴミときたもんだ
彼の人柄はそんな感じじゃないよ ねえ、openpyxlとかでオンライン上のExcelファイルを修正できないの? どこかのクラウド(どこ?)に置いたファイルの意味なのか
Office365で作成したファイルなのか どっちにしても手元に持ってこないと厳しいんじゃないかねえ 関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。 abcを使わないとできんことはあまりやりたくないねえ >>716
> 関数とクラス両方使えるのがpythonのメリットなのだから、常に適切な方を選べってことじゃないかと。
なら初めからそう言えや
まあそう言われたら適切な方の決め方について小一時間は問い詰めたいけどなw >>722
teamsに申し込んでoffice365に申し込めばクラウド上でエクセルが使えます >>712
カードゲームならカードクラスは作ったほうがよさそう。
あとはカードゲームのルールによる。 >>724
687が戒めたいのがまさに724みたいな馬鹿野郎なんだろうな。
目的と手段が入れ替わってclass考えて作るのに必死になる馬鹿。 カードクラス作ってもいいけど、同じカードが存在しない、記号4つと数字1〜13の組み合わせの
ものにクラスがいちいちいるかな。
カードクラスはカード1枚を表して、なにができればいいんだ?
記号クラスがあって、各記号クラスがあって、ナンバークラスがあって、
is_MarkMatchとかis_NumberMatchとかもってんの?
idとprintがあればいいのかな。まあいいけど、そんだけのために
classいちいち用意するのめんどくない?
複数枚のカードを扱うcardsクラスなのかな?機能はいろいろ持てそうだけど
ゲーム固有すぎてどうなのかな? 可読性考えるとクラスのほうが良いわな
自分だけが使うなら好きに作ればいい 自分だけが使う場合でも後々困る
読みにくくていいのは再利用しないと判ってる場合 >>725
689だが、トランプはクラスを作った方が(少なくともnamedtuple,dataclass)便利だと思うぞ
>>726
記号クラス、番号クラスなんて作らない
記号はenum、番号はそのまま1~13でいい
が、どの記号が黒だ赤だ、どの番号が絵柄か(JQKA)
みたいなのはたとえインスタンスが一個でもメソッドになってた方が便利だと思うけどなあ。
カードは内部表現とUI上の表現が異なるのが自然だし、そういう意味でもクラスにしておくのは悪くないと思うが
クラスにしすぎてもしょうがないというのは、ゲームのルールをクラスにして共通のインタフェース持たせて、バリエーションを切り替えられるようにしても大抵は仕方ないみたいなことだよ
もちろん、どんなゲームシステムを作るかによるし、ルールを共通インタフェースで入れ替えられるようにするメリットがある場合もあるけど 全てユースケース次第じゃね
13×4のブール配列で持っていたほうが都合がよい場合もあるだろうし とりあえず作って、必要に応じてリファクタリングしていけばいい カード型のインスタンスを生成するデッキクラスを作りたいやん
deck.suffle()
hands = deck.draw(5)
みたいなさあ
あとは各ゲームで処理つくろ 多くのレスを頂き、ありがたく思います
ちょっと自己顕示欲が強い気もしますが、俺のGitHubを公開させて頂くので、
よろしければご覧下さい
https://github.com/masa-gh/practice
のblackjack_3.pyがそれです
これでもクラス使わないで書けるのかな… 力作だね
友人のアドバイスは痛いほどよく分かる
クラス云々よりも「ここからメインの処理」以降の各処理を関数にまとめるほうがずっと大事だよ 何のためにでっかい関数の中にクラス作るのか分からん
この設計センスなら友人のアドバイスは正しいな レスありがとうございます
>>708
クラス使った方が見通し良くなりますよね?
スッキリJavaにもそう書いてありました(Pythonの本ではないですが)
>>709
複雑にならない方がいいからだそうです
>>710
ええ、ですので皆さんの意見をお聞きしたんです
>>711
うーん、明らかにプロと思われる方の書き込みもありますし、
信じられるレスはあると思います
>>716
ただ彼の主張では、なるべくクラスは使うな、ということでした
Javaを独習した経験がある俺からすると、少し疑問符が付くのです クソクラスをクソと認識できるためにもそれなりの能力が要るからね >>724
そうですよね
カードのクラス作りました
>>726
複数枚のカードを持つCardクラスです
ブラックジャックなので、A・J・Q・Kの値は別に決める必要があります
>>727
可読性は重視したいです
>>736
そう言って頂けると大変ありがたいです
やっぱりそこは1つの関数にまとめた方がいいんですね
>>737-740
それも友人に、グローバル変数は少なければ少ないほどいい、と言われたのを
受けてのことです >>735
ざっと見た感じ、そりゃ色々言われるわ
クラス云々言ってるのに、blackjackっていうデカい関数の中にクラス切ってる時点で吹いたわ
あとクラスの役割分担というか、所属してる関数もおかしく感じるわ
プレイヤークラスっていう名前なのに、にルール関係のスコア計算、バースト判定とかが入ってるし
それこそblackjackのルールを管理をするクラスを作る方が自然だべ
あともうし自分で書くとしたら、ルールクラスにis_winっていう関数作って、そこで勝利判定してtrue/falseで返すわ
最後に全パターンで人間/CPUに対して勝利判定かけてるけど、参加プレイヤー/CPUが増えた時の勝利判定の実装とか
これベースだと面倒だろうなって思った >>743
>グローバル変数は少なければ少ないほどいい
これはまず変数のスコープは狭い方が良い、っていう話だぞ
(グローバル変数だとそれこそスコープが広くてどこで書き変わるのかが不明瞭になるから、なるべく使うなって言われてる)
バカデカい関数を作るって何の解決にもなってねえwwwwwww 使い回さないのに関数化やクラス化する意味ってあるんだろうか is_<動詞> ってたまに見るけどどこかで流行ってるの? >>746
この業界には、「一処理は100行に収めるべし」という格言があってな
つまり100行以上の処理があったら、100行以内にぶった切って関数にして順次呼ぶべしってことなんだよ
理由は知らん まあ分割っていうか処理に名前つけろやって感じだな
抽象的に書こう でかい関数はあれもやってこれもやってになってるから、
それを機能毎に分割すればいいだけ
1箇所からしか呼ばれない関数がいくつもできるけど、それは問題ない
うまく作ってあれば、関数の戻り値を次の関数に渡すだけ、みたいなシンプルな構造に自然となる
それぞれの機能が変数をいろいろ共有していて切り分けられなかったら、元々の書き方が悪い pythonではクラスをあまり作らないほうがいい、じゃなくて
お前にクラスは百年早い、って言いたかったんだろその友人は。
碌に関数も作れないのだからクラスなんて無用の長物。 昔、関数ごとに仕様書作成が必要な現場があって、それを嫌って
ほとんどの関数が200行を超えるサイズで書かれる様になった 文書をアウトライン化するような感じで使うのね
メンテのときに不要な部分を読み飛ばせるのがメリットか 何か楽をするためのプログラムを作るのはいけるけど、
サイトの仕様変更で動かなくなったときの修正が苦痛だな、、
そのまま放置になりがち、、 スクレイピングはそのうち廃れる気がする
元データがあって人間用に加工して表示したものをまた元データに戻さなくても、
最初から元データで公開した方がお互い楽なことに気づき始めた C++でキー処理が数百行で、しかもファンクションキー毎に少しづつ違う
という構成のものを改修させれて辟易したことある
もしや、行数で成果が評価される現場だったのか >>756
人間向けのHTMLを解析すれば無料なのにAPI経由は有料ってのも多いしな。 Python勉強してるけどどうやって初心者の粋を超えたらいいのかが分からない
何か作りたいけどその何かが思い浮かばないし
自動で巡回してエロビDLするとか電子書籍自動でスクショとかできるんだっけ? >>759
早速思い浮かんでるじゃん
誰かができないと言うからやらないというなら何の勉強にもならない
明確な目的が無く勉強自体が目的なら機能しないゴミしか作れなくても意味があるし思い浮かんだもの全部作ればいい >>756
もしかして、APIが存在しない世界から来た方ですか? 別に既にあるものでも構わないから、何か作りたいというモチベーションがある内に色んなものを作った方がいい
独学は特に大事 途中で奥ちゃった
そしたら、次に何か新しいもの作りたくなった時に何が足りないか自分で調べられるぐらいにはなってると思う クラスを設計するのはものすごく難しい
作り始めないとわからないことも多いし
途中で仕様が変わったりしたら
簡単に破綻する
大きなプロジェクトでは
途中でクラス構成を変えることは
困難なので
しばしば大変なことになる >>759
この前も同じこと言ってる人がいたよ
作りたいものがないのでなんかアイディアないですかって
まず、何のためにPythonを勉強しているのか聞きたい
普通は作りたいものがあったり、仕事だから、課題だからという
動機があるはずなんだ
動機もなく身に着けられるものじゃないよ。プログラミングは一応専門技能だから >>766
最初から完璧な要件・設計で開発なんて不可能だから
途中で構成変わる前提で組み立てるんだよ
クラスに限った話じゃないけど インスピレーションを得るなら多くの作品に触れることでしょ プログラムやりたいと思った動機ってそれぞれあるだろう ズボラほど上達が早いように思う
やりたくないことは全部コンピュータにやらせたい 現実は必死に努力してQiitaにちょっとやってみたーみたいなこと書いてるやつばっかりだけどな 部品の置き換えが利くってのは完璧なプログラムとほとんど同義だね
具体的にねっちょりと書くしか無いこともあるけど 質問です。
これをヘッドレスモードで動かしたいのですがどうするといいでしょうか?
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
browesr = webdriver.Chrome(ChromeDriverManager().install()) すいません。
解決しました。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--headless')
browesr = webdriver.Chrome(ChromeDriverManager().install(), options=options)
browesr.quit() ちゃんと終わってる筈なのにタスクマネージャに残るんだよな async関数の終了を2箇所で待つ方法は無いですか?
普通にawaitを2回使うと既にawaitedした処理だぜってエラーが出ます。 答えは持ち合わせてないけど同じことを考えたことあるな >>780
エラー握り潰しても、肝心な処理待ちが出来ないので駄目です。 メモ化する関数でラップ
頻発するならデコレータ書く >>756
廃れないよ。Webって広告で成り立っている基本人間向けの情報発信ツールなんだから、人間向けのデータ(文章とかね)のスクレイピングは依然として残る。
APIは有料というのは広告収入につながらないから割と当たり前の話で。
利益を目的としないデータ公開はオープンデータ化していくだろうけれど、そういうのって政府や自治体のデータ公開、大学などぐらいしか基本的にはないだろう。 >>782
メモ化だと結果は再利用できますが、同時に待つことができないように思います。 >>778
task = asyncio.create_task(async_fn())
result = await task
result = await task >>785
うまく行きました! ありがとうございます!
TaskというのがJavaScriptのPromiseみたいな事してくれるんですね! なんでOpenCVはちょっとしたことでぶっ壊れるんですか? _max=7
_min=3
a=2
if a>_max:
a=_max
elif a<_min:
a=_min
print(a)
これってもっとスマートに書けませんでしたっけ ちなみに0を含む自然数で
range(_min,_max,1)
です
これの範囲外は判定できるのですが
_minより小さく外したのか、_maxより大きく外したのか
って一行で短く書けなかったかな、と。
記憶違いかもしれません、無かったような気がしてきました >>790
できました!!
そうですこれです!
_max=7
_min=3
for i in range(10):
print(i,max(min(i,_max),_min))
ありがとうございます!! 最近excelで、答えがマイナスなら0にする、という処理がめんどくさいと思ったけど、
max(0,x)でシンプルに書けた >>790は一見何をやっているのか、やりたいのかわからんし
メンテナンス性が悪そうだ
>>788の方はわかるし改造しやすい
コードは短ければ良いというものではないな やりたいことをまず自然言語で書く
minとmaxの範囲内ならそのまま出力
範囲外ならばminとmaxでガードする
これだけの情報量があるので、コードがそれなりの長さになって当然 >>788
np.clip(array, _min, _max) 何がコードゴルフかはジャンルにもよるよなあ。シェーダーなんかだとminmaxみたいなのは常套句みたいなものだし、
pythonの内包表記もちょっと凝り出すとコードゴルフ的になる。コーディングガイドラインがあればいいけどね。 >>794
さすがにこのくらいはグラフ考えて分かってよ まあ、minmaxの良くないところは、慌てて順番反転させたりする事故が起きると何もクリップしてくれなくなるところなんだけど(良く使うなら関数化しておくべき)
とはいえ、minmax的なのNGって、関数型言語全否定に近いものがあると思うんで、その立場でいいのかは考えるべきだと思うけど。
もちろん手続き型メインのPython使ってるんだからPythonではそんなのお門違いだという意見も否定はしないけど maxとminでもいいと思うけど
頻繁に使うならclamp(val,lo,hi)みたいな関数作ればいい 初コメです。質問させてください。
ウィジェットに、押すとnotepad.exeを起動するボタンを作ったのですが、起動したテキストに文字を書き込む(テンプレート)ボタンを作りたいのですが、どのようにすれば良いでしょうか… >>802
PyAutoGUI
内容次第ではPythonやめてAutoItだけの方が楽 AutoItとかAutoHotKeyとかキーボードやマウスをプログラムから操作して
自動化するツールはいろいろあるけど、
どれが最強なのか今ひとつ判らない
簡単にする為に出来ることを減らしていたり、
いろいろできるけど言語仕様が原始的すぎたり
pythonと同じ書き方ができて出来ないことがないのが理想 対象のプログラムやウィンドウが背面に行ったり最小化されててもちゃんと動くかどうかで選べばいい 対象プログラムが背面にあっても動くってウインドウハンドルにSendMessageを直接送る感じ? windowsのアプリをバックグラウンドで起動して動かすようなのが出来たらなぁ
マウス取られるから他の作業できないんだよね WindowsをVMに入れるか、リモートデスクトップ複数人ログイン対応のWindowsならフォアグラウンドでも実質バックグラウンドにできるから困らなさそうだ
Win32APIを直で叩きまくればバックグラウンドでも動かせるような気がしないでもないけど、イベント処理のメインループが回るかは謎だね。全然詳しくないや。 >>790 がメンテ性悪いとか言う人は
プログラマー向いてないと思うの temp = min(input, upper_limit)
output = max(temp ,lower_limit)
これを合体させただけなんだけどな 関数化せずにインラインでそれ書いてきたらレビューでハネる >>809
まあ適宜空白入れろよとは思う
a = max(min(a, _max), _min) >>810
そもそもmaxの中にminがある時点で頭がおかしくなる俺の場合 import ctypes
SendMessage = ctypes.windll.user32.SendMessageW
hWnd = ごにょごにょ
pos = (y << 16) + x
SendMessage(hWnd, 513, 0, pos) # WM_LBUTTONDOWN
SendMessage(hWnd, 514, 0, pos) # WM_LBUTTONUP
>>806
こんな感じかな
どのみち、どう処理されるかは相手次第になってしまうけど
背面とか最小化とか、最悪トップに出てきたり >>813
それは自動整形機能の仕事で人間が気遣うことではない >>803
pyautoguiで一歩進みました!ありがとうございます! >>810
その2行なら受け入れるけど合体させるのは意味はないじゃんって思うよ 関数名と変数名を工夫すれば良いと思う
_付けるだけでそれを区別するのはちょっと >>818
それは、+=や、f.write(','.join([若干長い内包表記]))が許されるかみたいな話とも繋がっていて、
ぶっちゃけ何度も出て来ればこんな簡単なのは1行にしたくなると思うよ
内包表記だって1行で書きたいから書くって側面もあるわけじゃない。 >>816
掲示板に書く時におまえが気遣えよって言う指摘だぞw a = range_ni_osameru(_min, a, _max)
どや! def range_ni_osameru(_min, a, _max):
return _min if a < _min else a if a < _max else _max
こうかな! >>823
俺なら
return _min if a < _min else _max if _max < a else a
って書くかな 行数というよりは、中間の変数を登場させたくない
合体させるにしても、後ろに繋げていく方式とネストを深くしていく方式があって、
ネストだとどうしても可読性を損なう 普段可読性重視だけどリスト内包表記だけは速度変わりすぎるから超複雑にしちゃう 100倍変わるなら考えるけど、倍程度ならどうでもいい 内包表記も+=も三項演算子もlambdaも、(言語設計者に対して)日和って半端なもん入れてんじゃねーよって思う。 ごてごて書けるラムダを入れないのは良心を感じるけどなあ >>827
処理時間がめちゃ長くて100倍速くしたいならそもそもCythonとか考える
処理時間ちょっとイラッとするぐらいだったら内包表記で倍速くなれば十分なので内包表記止まりかな サンプルコードがlambdaで書かれがちなのもあって
その場で関数定義できるの知らずにごてごて書くケースよく見かける
悲しい なるほどlambdaに関しては色々意見あるな。半端な知識で物言った俺が悪かったわ。 Pythonやるならまず「多重継承」な!
なぜ多重継承かというと、自然言語処理において語句の意味は「文脈」によって異なるからだ!
随意筋 不随意筋
↖ ↗
チンポ
チンコの随意筋と不随意筋
http://d.hatena.ne.jp/tottokotokoroten/20130516/1368716650
https://mobile.twitter.com/daikidomon/status/1385368820240437248
土門大貴/Daiki Domon
@daikidomon
Pythonの多重継承がわかりづらい。
継承クラスの左のクラス名を指定とかあたおか。
https://twitter.com/5chan_nel (5ch newer account) >>827
30分かかるループの中心で何度も使われてたら
倍速になったら15分短縮出来るし
100分の1なら数秒で終わるんだが >>828
内包表記: あり
+=: あり
lambda: あり
三項演算子: お前は遺憾 とりあえず読みやすいように書いて、速度で困ったら考える >>837 =
内包表記? あり
:+= ? あり
:lambda ?あり
:三項演算子?お前は遺憾
:以下略
ということですね C言語とかの伝統的な三項演算子と違って、
pythonのはなかなかいけてると思うけど 他の言語なら三項演算子は大好きなんだけどPythonだと異物感がある 並びが
(Trueの場合) (条件) (Falseの場合)
になるのが気に食わん if <condition> then <val1> else <val2>
も英語として不自然さは無い
それを、?と:にするのは無理がある
冒頭からifで始まるとif文と区別が付かないので、少し倒置して、
<val1> if <condition> else <val2>
も一応文として読める
C言語よりはまし 通常のif文でも処理(結果)を先に書く新しい言語を作るか プログラミング言語に英文的な自然さとか求めて無いんだわ
読む順と評価順が入れ替わってんのがセンス無いと思う 処理をifで修飾するというのは既にある
elseは知らん そうする合理的理由を説明すれば納得するものじゃないの?
そういうのを聞きたいんだよ 英語だと if が後置されることもあるからなあ
内包表現は数学の集合の書き方からすれば普通
ラムダは lisp のラムダ関数から考えれば普通
一応理屈はあるけど 三項演算子だけじゃなくて、Perlみたいに後置ifを実装してれば違和感ないんだろうね
(Trueの場合) if (条件)
Falseの場合はなにもしないけど、Pythonだとpassがあるから三項演算子だけで十分って判断かな そうか結構、式である三項演算子や内包表記やlambdaも受け入れられてるんだなぁ。そうなるとなんでmatchを式にしなかったのか。コレガワカラナイ 後置ifは文だから値を返す必要がない(=elseは不要)。三項演算子は式だから値を返すのに必要。
なんでこの2つを混ぜたような文法にしたのかなんとも不思議。 どこが変なのかわからん
俺の英語スキルが高杉なせいか… lambdaといっしょでゴチャゴチャ書きづらいのが良心
実際は構文解析が楽だとか余計な()が不要とかあるんだろうけど 全部英単語でつなげるから、エディタで色変えたとしても見づらいってのはすごく感じる import re
str = 'abc123456defg'
s = 'bc'
m = re.search(f'{s}(\d{2})', str)
if m:
print(m.groups()[0])
\d{2}だと12が表示される
\d{1}とか\d{6}だと想定と違う
なんで? そりゃ、想定が間違えているから、以外になんか考えられるのかい?
何を想定していてどうなったかも説明しないで、想定と違う!って
言われてもね、人に説明する気も無けりゃ教えを乞う態度でもないし
何したいの?日記ならよそでやってくれる? >>> f'{s}(¥d{2})'
'bc(¥d2)' まあまあ、お勉強スレなんだし未熟者同士で問題解決していくスタンスで良いんじゃないの f文字列で¥とか/区切りの一部だけを取るような事出来ないのかな?
splitしてスライスで取るのはどうも好かん >>1>>866
> ★Pythonのソースコードを5ちゃんに直貼はインデントが崩壊するので、
> ↓等のコードうp用サイトに貼ってきてくだしあ。(スクリーンショットをうpる「横着」禁止)
> ttps://techiedelight.com/compiler/ Run Code機能あり。
> ttp://ideone.com/ デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
> ttp://pastebin.com/ まずまずシンプル。
> ttp://dpaste.com/ とてもシンプル。消えるまでの日数は十分長ーく指定のこと。 それも必要悪だな
貼った先が無くなった後でログを見た人に何の知見も残せない >>876
>デフォ設定がCなので、Pythonするには言語種選択ボタン押下がピコ手間かも。
一回 python を選択すれば、あとはずっと選択したpythonのままになりますよ 外部を利用する根拠がインデントの崩壊だけなら、崩壊していないのだから不要
なるべく単体で完結していた方がいい
コードが長いとか、修正後のコードと比較したいとかになると、
さすがに掲示板の機能を超える 今更ここで議論する課題でもない
この件はペンディングとして、運用時に自己判断でよいだろう 日付(○年○月○日 ○時○分)を抽出してクリップボードにコピーするのってどんな感じでやればいいですかね… コピーはコマンドでできるから
Windowsならcopy、Macならpbcopy
テキスト抽出して外部コマンド実行するだけ 例えば、Ruby でクリップボードを使うなら、
あらかじめ、クリップボードへ「 あい 」を入れておいてから、
以下のスクリプトを実行すると、
文字列の前後にある、空白類が削除されて「あい」となる
ただし、RubyはUTF-8 だから、Windows のCP932 と変換する必要がある
# クリップボード内の複数行文字列の、各行の先頭・末尾から、
# 連続する空白類を除去して、クリップボードに入れる
str = `powershell Get-Clipboard`
str.encode! Encoding::UTF_8, Encoding::CP932 # UTF_8 へ変換
ary = str.each_line.map( &:strip ) # 連続する空白類を除去する
IO.popen( 'clip', 'w:cp932' ) do | clip | # CP932 へ戻す
clip.print( ary.join "\n" )
end ググったらpyperclipって便利なモジュールがあるらしいよ
前レスから予想するにウィジェットの日付けをメモ帳に貼り付ける感じかな
ウィジェットからのデータ取得はウィジェット作成時にStringVarを関連付けてget,setで取得すれば良い
ログを残すならファイル入出力でやるべきではと思うけど rubyの人最近見なくなったと思ったら
また自己主張してきたな 千葉県は恐ろしい田舎なうえ、今もドンドン衰退してる最中。
でも、関東以外の人はそんなこと知らないから、東京の一部みたいな顔できるよ。 逆に考えることもできるよ。
電車一本で東京に出れる田舎って最強。
みたいな。 すみません、python超初心者なのですが
ttps://github.com/ihopenot/LpkUnpackerのpython LpkUnpacker.py /path/to/lpk outputdir /path/to/config.jsonのコードを使いたいのですが、何回やっても
python LpkUnpacker.py "C:\11302997995514316369.lpk" "C:\aaaa" "C:\config.json"
^^^^^^^^^^^
SyntaxError: invalid syntaxのエラーが出てできません。
どうかご教授の程よろしくお願いいたしますm(__)m >>902
そのコードをpythonから読み込んでいますか? >>902
SyntaxErrorなんで構文に間違いがあるんだけど、ここじゃ正確なコードが貼り付けられないから、自力解決を目指すか、外部サービスを利用してコードを晒すかしてください >>902
ファイルパスの¥を2個つけないとエスケープ文字になるんじゃ うろ覚えで関数名だけわかってるような状態で
関数の使い方がよくわからなくなることがある
たまにドットが前に来るやつあるじゃん
kansu(引数)
.kansu(引数)
aaa.kansu()
モジュールがどうとかいう話なんだろうけど
こういうのみんなどうやって覚えてるの? 組み込み関数は全部覚える
そこに無ければオブジェクトのメソッド
.sort()とsorted()みたいに両方にあったりもする IDEを頼るのです
ここかここがええんかと関数名をちょっとタイプしてみてああんそこはダメぇ(OKという意味)と出たシグネチャを使えばよい >>902
LpkUnpacker.pyがあるディレクトリまで移動して
python LpkUnpacker.py だけでやってみて
usage:ほにゃららってでてるか? https://mobile.twitter.com/yukiya285/status/1594225137171451904
ゆきや@創薬エンジニア
@yukiya285
機械学習の分野でPythonがよく使われる理由は、ざっくり言ってしまうと、理論の根底にある数式が理解できていなくても機械学習ができるから、ということになります。理論の理解は後回しにして、とりあえずいろいろやってみる、ということができるのがPythonということになります。
https://twitter.com/5chan_nel (5ch newer account) 理由が理由になってなくね?
NumPyやsklearnのようなお手軽ライブラリが充実してることが理由じゃないのか cをやろうがアセンブラをやろうが
誰かが作った技術の上でしょ
スクリプト言語を使う1番の理由は生産性の高さだよ Pascal なんかは
プログラミング教育を意識して作られてたものだが
真逆の発送のツイートだな >>913
どうだろ
俺は数学できるけど早いcが書けないからライブラリに頼れるpython選んだのが始まり ライブラリとか言っても判らない人向けの説明なんでしょ やってみるのはいいことだけど
ライブラリ任せにするのは他力過ぎて草 ライブラリ最高や!ワイよりちゃんとした実装してるしな。ワイが書く必要なんて無いんや………
って気持ちになるから嫌い ライブラリ任せにするのはダメな人はコンパイルはコンパイラに任せずに自分でやってるのかな... もしかしてライブラリに使われてるcのソース読まない人たちばかりなのw 必要ならライブラリのソースも読むけど普通は読まんな
で>>924はコンパイラのソースを読んでるの?w >>916
おめーらホント視野の狭いクズばっかだな
最適な言語を使うのは
プログラマの基本中の基本だぞ?
それとスプリプト言語使う仕事なんてのは
どんなバカでも出来る仕事であって、
それだからこそ、プログラマはスプリプト言語を使う機会は少ないのだよ。
おめーのようなバカは
プログラマ気取りの
ただのコーダーだw
半島ヘかえれよチョソ! >>926
ライブラリの話からなんでコンパイラが関係してくるんだよ
それとコンパイラってソース公開されてたっけ?
読めるかどうか自信ないけど、公開されてんなら読んでみたい >>928
> それとコンパイラってソース公開されてたっけ?
マジで言ってるのか?
そんなレベルでよく
> もしかしてライブラリに使われてるcのソース読まない人たちばかりなのw
なんて煽れるもんだな >>929
どっちだと思う?w
ここではっきりさせないほうがあなたのためになるんだと思うよ >>928
他人の書いたコード任せというのはコンパイラを使うことにも当てはまるからだろ >>930
> それとコンパイラってソース公開されてたっけ?
なんて聞く奴なんてどっちでもいいわw たまにPythonの実装(C言語)を読めるのが正義、みたいに思ってるやつおるけど
大抵の場合は読む必要は無いし、勉強がてら読むか、
ライブラリ使ってて気になる挙動(不具合の可能性があるやつ)に遭遇した時に
実装確認するぐらいじゃね? 最速を争う言語ならコンパイラの実装に寄せて速度を稼ぐのもアリだけど、Pythonでそんなことする意味は1㍉もない >>927
生産性の高さという使い分けの話をしてるのに何を言ってるんだ
プログラマがPythonを使わないと言うならそうなんだろうよ
マ版に帰れよ pythonのC実装ってPyObject*観たらおしまいやで a = [0.2,0.6,0.1,0.3,0.9]
b = ['A','B',C''D,'',E'']
とあって、aを0.5以上ならTrue、違えばFalesの真偽値に変えて、
bからTrueのところだけ抜き出すにはどのように書けば良いですか? a = [0.2,0.6,0.1,0.3,0.9]
b = ['A','B',C''D,'',E'']
c = [y for (x, y) in zip(a, b) if x >= 0.5] >>943
リスト内でfor文とif文使うんですね
ググってそれっぽい感じではあったのですが
Rのノリで書けないかなと困ってました
ありがとうございました >>942
numpy使えば直感的にできる
a = np.array([0.2,0.6,0.1,0.3,0.9])
b = np.array(['A','B',C''D,'',E''])
print(b[a>=0.5]) numpyとかpandasのループの処理を一言に圧縮してしまう書き方は流石だよな >>945
うおお、凄くすっきりしましたね
直感で分かりやすい
ありがとうございます b = b'\xfc\xfc\x8a\xbf\x8e\x9a'
j = b.decode('sjis', 'ignore')
print(j)
↑これと同じ書き方をC/C++もしくはGO言語で教えて下さい
ようは、変換できないバイトは読み飛ばして残りを変換してくれればいいだけなんですけど、
調べても分かりませんでした。 スクリプト言語はマルチプラットフォームで高度な機能を使えるのが強みよね
windowsならMutiByteToWideCharみたいなAPIがあったはず
サクラエディタのソースコードみると良いかも みなさま
ありがとうございます。
エディタのソースコード、確かによさそうですね。
バイナリエディタとか凄い重いファイルでも一瞬で開くので実装参考にしたいですね。
理解できるか分かりませんが・・。
勉強してみます。 愚直に(lib)iconvで変換でいいんじゃない?
止まったら飛ばして変換続けるだけの単純な作業
それかiconvにかわる何かがあれば逆に知りたい 文字コードから文字コードへのmapがちゃんとしてないので、
文字コード変換は本質的に不完全 MSが変な実装したせいだろう
「~」辺りがおかしくなる 間違ったかなり後で修正したので、どっちもありというさらにややこしいことに Ruby では、NKF を使う
Iconvは、Ruby 1.9から非推奨 >>959
NKFを利用する理由とIconvが非推奨な理由を書かなければ、ここでは無駄なレス Ruby では、UTF-8 がデフォルトなので、
そのバイナリをCP932 として入力・解釈し、CP932として変換・出力すると、
解釈できない文字はデフォルトで、? に置き換えられる
bin = "\xfc\xfc\x8a\xbf\x8e\x9a"
p bin.encoding #=> <Encoding:UTF-8>
bin.encode!( 'CP932', 'CP932', :invalid => :replace )
p bin.encoding #=> <Encoding:Windows-31J>
p bin #=> "\x{FCFC}\x{8ABF}\x{8E9A}"
puts bin #=> �漢字 Pythonにボロクソに負けて悔しいRubyキチガイ
Rubyはもう終わってるから出てくるなよ てか今ruby使う意味あるの?
どう考えても乗り換えた方がいいよね?
どう贔屓目に見ても衰退していく一方でしょ? Ruby on Railsは今でも生き残ってるのでrubyも使われていると言えなくもない
そんなこと言ったら、perlだって今でもいろんな所で使われ続けている
それらは今更新しいもので置き換えるコストもかけてられないし、
今後も使い続けられるだろうけど、新規で何かを作ろうとは思わない
単に保守され続けるだけ とにかく動くサービスつくりたいならTSかRuby(Rails)と思うけどな
べつにひとつの言語に縛られるわけじゃなしよくわからん JavaScriptが1位を独走するようなサンプリング空間はどうでもいい 半島系帰化人のように
ゲリ便をジュルジュルと食べる!
おいしい! 最もライトな層まで含めると、VBAとかになるじゃない? 今の時代は、HTML・CSS・JavaScript がかなり使われているだろうなあ うちのサイトは今でもhtml手書きだけど、自動生成でないhtmlなんてごく僅かだろう 開発現場で使われている言語で評価するか、
稼働しているシステム上の実行イメージ数で評価するか、
稼働でみると意外にCobolやFortranが浮上してきたりするかも
ファームまで含めればC言語なのかな?(アセンブラは除くとして) 動いてる、で勘定するとJavaの35億なんじゃないの
新たにコードを書いている件数でないと C#じゃないの
Windowsマシン一台につき何十本単位で常時動いてるわけで intel CPUのマイクロコードはもっと動いてるな
動いてる禁止 そうなると開発環境が入っていないPCは除外しないといけなくなる >>964
ほんそれ
>>965
だから新規でわざわざ覚える必要無い言語のphaseになってるって話 過去に作ったperlのツールに機能追加とかしたくなった時に、
折角だからpythonに移植したりする
正規表現周りはperlの方が優れてる気がする l = [0, 1 ,2 ,5, 7]
n = 4
ln = [0, 1, 2, 4, 5, 7]
数値比較をして、prev <= x <= next位置に挿入する
myInset()関数作りたいんだけど、ループと代入連打して泥臭く書いてくしかないですか?
ちなみにリストは全部int型、重複あり、ソート済み
入力値もint型、既存要素と同値ありです 手順を守りたいならfindとinsertでしょうね 元が重複ありソート済みなら>>988で問題ないんでないの? 殆どソートされてるものをソートするコストは低そう
やろうとするのはソート処理の一部を自前で書こうというもので、
既製品を使った方が簡単で速い >>987
import bisect
bisect.insort(l, n)
リストに挿入ならこれ一発で 一見面白そうな話かと思ったが普通にappend後ソートしかなかった こういう時は大抵、insort_leftみたいに専用のモジュール使った方がだいぶ早い append後ソートは流石に無駄が多すぎ
上で答え出てるが木構造ベースのアルゴリズム使えばO(logN)で挿入出来る 速度に困りそうなときはbisect、一発動けばいいときはsortで済ませちゃうかもな
bisectは標準モジュールだし、辞書でC++のmapのlower_bound/upper_bound相当のことをしたいときにも使えるから知っていて損はないと思うけどね
本当に速度を追求するなら、Pure PythonじゃないB treeとかを使いたくなるよね。
めんどくささは速度を追求するほど上がっていくから確かにどの程度速度で困っているかによってベストの実装は変わるとは思うけど。 このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 70日 2時間 26分 2秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。