Pythonのお勉強 Part68

■ このスレッドは過去ログ倉庫に格納されています
2022/09/15(木) 18:52:26.67ID:VqLViKoX0
!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
238デフォルトの名無しさん (ワッチョイ 7f73-8eI1)
垢版 |
2022/10/06(木) 01:46:24.04ID:eDAszKmt0
>>237

bot.py実行後に、~\Programs\Python\Python38-32\Lib\site-packages\toml
内のpython38-32のdecoder.pyからエラーが出てます。
powershellを使いました。 ほぼ素人ですみません。
2022/10/06(木) 02:48:03.34ID:2LM4DEsy0
コードじゃなくて食わせるデータがおかしいんでないの
240デフォルトの名無しさん (ワッチョイ c32c-Kmz1)
垢版 |
2022/10/06(木) 03:52:44.67ID:mL002h1/0
>>238
python入門おめでとう!
2022/10/07(金) 05:27:45.05ID:TBR3DhbF0
「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!") がある
242デフォルトの名無しさん (ワッチョイ 7f73-8eI1)
垢版 |
2022/10/07(金) 07:11:32.41ID:0vlnX2v40
>>241
UTF-8になってました。
ValueError: Duplicate keys!とTomlDecodeError: Duplicate keys!が出ていますが
デコードが実行された結果キー重複が起こっているのを知らせただけで、原因はやはりbot.pyの中にあるのでしょうか?
2022/10/07(金) 09:55:21.23ID:BuUd5Oey0
>>242
tomlでエラー出てるなら
bot.pyで
config = toml.load(open("config.toml"))
っていう記述あるけど、config.tomlの中身がおかしいんじゃない?
2022/10/07(金) 13:38:21.48ID:6W+GCvSh0
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

こういうファイル名や行数とか出てないの?
2022/10/07(金) 19:08:20.49ID:Z2W6Vqfk0
pyautogui素晴らしい最初に知りたかった
2022/10/07(金) 20:11:45.22ID:f7Qxxz6p0
ぴゃうとぐい
2022/10/07(金) 23:54:53.64ID:cLCpsl3k0
TOML のValidator で、TOMLファイルの形式が正しいかどうか、チェックすれば?
「toml validator online」で検索!

プログラマーなら、VSCode で、〜/toml/decoder.py をデバッグするとか、

decoder.pyを差し替えて、
raise ValueError("Duplicate keys!") の前後で、ログ出力してみるとか
2022/10/08(土) 07:10:23.20ID:kX9hT5zA0
PyAutoGuiも便利だけど何でもできるかというとかなり限定的

画面がこういう状態になったらこの条件に合う部分を探して、
この範囲をコピーしてこのアプリに切り替えてコピペ
みたいなことはできない
2022/10/08(土) 07:26:14.47ID:Qqe7/SLY0
ディスプレイを切ったら動かないのも使いづらい
2022/10/08(土) 11:25:58.24ID:TDMvIP2Ta
ライブラリ関数の情報を調査する方法についての質問です
sagemathというpython wrapperにあるpolygon3dという関数がどういうキーワード引数を持っているのか調べたいのです
ググるとinspect.signature関数というのが見つかります
コレでpolygon3dを調べてみると
signature = inspect.signature(polygon3d)
print(signature.parameters)

OrderedDict([('points', <Parameter "points">), ('options', <Parameter "**options">)])
と出ます
おそらく位置引数'points'とキーワード引数がいくらかあるという意味だと思うのですがやはりコレが限界なんでしょうか?
どんな名前のキーワード引数を持ってるかの一覧表を出力するような方法はないもんなんでしょうか?
251デフォルトの名無しさん (ワッチョイ de10-XciQ)
垢版 |
2022/10/08(土) 12:37:16.55ID:ymJkU01o0
>>250
オープンソースなんだからGitHubに見に行けばいいじゃん
2022/10/08(土) 14:49:02.11ID:hw6LN7oLa
>>251
そうなんです
実際sagemathは割とドキュメントもしっかりしててググれば一覧とかもあります
でもいちいちめんどくさいじゃないですか
もしかしたら各オプジェクトで利用可能なキーワード引数のリストを得る方法とか容易されてたら便利でいいなぁと
結構ググったのでなさそうではあるんですけど、調べて「あった」場合はともかく「ないなぁ」の場合、やはり最終的には強者に聞いてみないとダメかなと
2022/10/08(土) 15:06:18.06ID:lWG3uN0c0
ドキュメントをぶっこ抜いてその関数がどんな引数とるかのポップアップをエディタで出せばいい
2022/10/08(土) 15:13:56.04ID:bWQzA1rj0
pyautogui
エラー出さずにできましたが最適ではない気がします
下記のやり方より良い方法があれば教えて欲しいです


pyautogui.write() でエクスプローラーのアドレスにパスを打ち込む時
日本語や \ が入力できなかったり、最初の C: が C* に勝手に変わったりしました
・pyperclip を使って値をコピーしてから、pyautogui.hotkeyで貼り付けました


pyautoguiを使って検索したりクリックしたりする時
・画像認識してから次の処理する時は、while pyautogui.locateOnScreen() is None: で time.sleep(1) させて
・検索結果表示とか全選択とか、少し時間がかかりそうな箇所は逐一改行して「time.sleep()」を書きました
これを書くのが結構あってcodeが余計に長くなりました
2022/10/08(土) 15:27:35.37ID:bWQzA1rj0
pyautogui 便利だけどマウスとモニターが使用不可になるのだけは面倒でした
下のソフトの処理ができるなら別のもので構わないのですが、pyautogui以外でやってる人がいたら教えてください

・Adobe Acrobat
・Evernote ※Legacy版
・ソシャゲ全般(デイリー回収用)
2022/10/08(土) 15:49:00.05ID:kX9hT5zA0
ahkで簡単なことはやらせてる
python化されたahkがあればいいのにと思っている
2022/10/08(土) 15:57:12.38ID:IpF+MZYD0
ahkって何?
2022/10/08(土) 16:00:09.87ID:xEoQJfh1M
sleepが面倒なら画像名を指定するだけで待ち&クリックする関数を作れば良いんでない
バックグラウンドでの使用は、昔VPCを多重起動して使ってたことあるけど今でも出来るんかな
昔、某MMOでプロセスメモリの内容を読み取って動くマクロとか作ったけど
プロセスメモリが読めればエスパーなマクロが作れるよ
2022/10/08(土) 20:40:05.22ID:bWQzA1rj0
>>258
それでやってみます
ゲームに使えるならプロセスメモリもその内手を出しそうです
2022/10/09(日) 00:21:51.03ID:t9JKJStV0
>>252
VSCode, Ruby では拡張機能で、関数の説明なども見れる

また端末から、そういうコマンドを実行しても見れるけど、
ブラウザで見た方が見やすいので、
一旦コマンドで説明をHTML ファイルにしてから、それをブラウザで見て、
見た後に、HTMLファイルを削除する。
これが自動で行われる

ただし、その関数・モジュールの作者が、
Doc コメントみたいな決められた様式で、コメントを書いている場合のみ

たいてい、Doc コメントの説明などは、
パーフェクトRuby などのパーフェクト・シリーズ本に書いてある
2022/10/09(日) 04:21:23.14ID:L81MTKQk0
クリップボードにpathlibのPathで指定した、不特定多数のファイルをコピーをしたいのですが方法が分かりません
コピーするファイルは、フォルダー・テキスト・画像・動画・PDF関係なく、PC上で選択してCtrl+Cできるファイル全てが対象です

pyautogui.hotkey(“Ctrl”,”v“) を使って貼り付ける予定です。※Evernote Legacyというメモアプリ上で使いたい

pyperclip、shutil、pillow関連の記事は見つかるのですが、クリップボードに複数・拡張子問わずコピーする方法が見つかりません
どうすればできるのか教えてください
2022/10/09(日) 04:59:04.96ID:L81MTKQk0
今のところPathにあるファイル名いじって、検索かけてから全選択して、pyautogui.hotkeyでコピーするという遠回りなやり方でしてみました
2022/10/09(日) 11:51:56.93ID:xdRBYpSIM
FileDrop形式に変換できれば良いんだろうけどパッと検索してみた限り難しそうだね
VSを使ってクリップボードを監視してファイル名が含まれていたらFileDrop形式に変換するアプリを自作するか
コピー用のtempフォルダにファイルを一旦コピーしてから全選択→貼り付けとかでも良さそう
2022/10/09(日) 16:29:09.15ID:L81MTKQk0
>>263
FileDrop形式という単語を知れただけでも良かったです。ありがとうございます
265デフォルトの名無しさん (ワッチョイ cb63-rqSc)
垢版 |
2022/10/09(日) 20:19:39.13ID:nf8IBTFd0
chm形式のヘルプが3.7までしか野良に無いんだけど、3.10(stable)のchmどこかに無い?
公式はDLしたいけど404でオンラインでしか参照できなくて困ってる
2022/10/09(日) 20:45:08.96ID:Ozrjh9EB0
>>265
公式にpython3107.chmあるし、落ちてくるよ
267デフォルトの名無しさん (ワッチョイ cb63-rqSc)
垢版 |
2022/10/09(日) 20:53:03.75ID:nf8IBTFd0
>>266
すまん、日本語版希望。。。
githubに3.7jpビルドしてる人の使ってる
2022/10/09(日) 23:28:35.38ID:t9JKJStV0
>>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 # 出力したコマンドプロンプト画面を閉じないようにする
2022/10/11(火) 09:09:33.80ID:L++CLq2X0
すみません、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クリックで確認しました。
2022/10/11(火) 09:22:50.72ID:S+x+TbIN0
エラーメッセージの内容を切り分けて質問しろよ

エラーの原因はすぐわかるだろ
web view not found

まぁ、こんな状態でスクレイピングとかアホかって感じだけど
2022/10/11(火) 09:43:03.84ID:L++CLq2X0
>>270
回答どもでーす
2022/10/12(水) 16:39:03.55ID:+cq2T5fE0
python 3.10.8インストールしようとしたらエラー出る

こういうやつな
https://pullanswer.com/questions/python-3-10-8-amd64-exe-fails-with-access-is-denied
2022/10/12(水) 16:41:57.24ID:Q9qje2Sc0
ご愁傷様
2022/10/13(木) 13:50:28.26ID:uklwGmra0
>>272だけど今試したら3.10.8インストール出来た
https://www.python.org/ftp/python/3.10.8/amd64/ のフォルダの属性設定を間違えてたらしい

よって>>273は昨日の時点ではインストールしてないとすぐに分かるんだね
2022/10/13(木) 18:02:26.26ID:SD2zWMPC0
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型にして取り出してから処理して結合させたいのです。どうすればいいでしょうか。
2022/10/13(木) 18:15:58.69ID:rU12tc+I0
んちんちん
2022/10/13(木) 18:37:05.73ID:1c9Wc9kf0
pandas詳しくないけど
a=df.iloc[[0,2]]で出来たお
2022/10/13(木) 18:44:41.46ID:7YLMS5Bz0
pandasはそれだけでスレ作ってもいいくらい複雑で深いな
2022/10/13(木) 19:07:19.22ID:ZrA3PYH80
二重の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
2022/10/13(木) 19:21:12.59ID:glAi4q7Na
二重ループを使わない
281デフォルトの名無しさん (ワッチョイ de10-bGEg)
垢版 |
2022/10/13(木) 19:23:22.28ID:0KS7pmji0
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とか
2022/10/13(木) 20:02:02.53ID:PAZSTe6jM
検索なら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)
2022/10/13(木) 20:03:15.66ID:QL8so1O30
よほどのクリティカルなイシューが解決されたのでなければ
アップデートされたからと言って、慌てて入れないもんだよ
2022/10/13(木) 20:15:24.40ID:SD2zWMPC0
>>277
一回それぞれ個別のSeries型を抽出してからくっつけたいんです。
2022/10/13(木) 20:24:16.77ID:SD2zWMPC0
わかりました。Series型だと追加できないので一回一列だけのDataFrame型に変換すればいいみたいです。

a = pd.DataFrame(df.iloc[:,0])
そのあと、列追加で
a.loc[:,"new column"] = df.iloc[:,2]
とやれば追加できました。
2022/10/13(木) 20:32:37.12ID:1c9Wc9kf0
こうかな
a = pd.DataFrame([df.iloc[0, :], df.iloc[2, :]])
print(a)

numpyになると[行, 列]になってややこしくなるのを思い出した
2022/10/13(木) 20:43:16.18ID:ZrA3PYH80
>>281
breakしたらelse飛ばす挙動は知らなかったです
ありがとう
2022/10/13(木) 20:45:51.49ID:1c9Wc9kf0
l = list()
l.append(df.iloc[0, :])
l.append(df.iloc[2, :])
a = pd.DataFrame(l)
print(a)

見やすくするならこうやね、勉強なるわ
2022/10/13(木) 21:15:44.80ID:Tqa4ZL2z0
>>274
WSL2+Docker使ってるからな
実機には入れない
2022/10/13(木) 21:37:50.04ID:vk/pladO0
>>281
その三択なら読みやすさ的に
関数にしてearly return一択だと思うんだけどなぁ
2022/10/13(木) 23:54:28.43ID:rU12tc+I0
んチンチンンンンンンン
2022/10/14(金) 01:29:03.54ID:0UzEEAJh0
>>286
行・列逆
2022/10/14(金) 05:44:04.16ID:WQ3ra/reM
>>292
ごめん文盲やったわ
2022/10/14(金) 05:58:04.32ID:CNXM2/Lz0
sr1 = df.iloc[:, 0]
sr2 = df.iloc[:, 2]
a = pd.DataFrame({"0" : sr1, "1": sr2})
print(a)

辞書型で登録
今度こそどや
2022/10/14(金) 23:30:33.11ID:0UzEEAJh0
>>294
できました!辞書型なら列追加できるんすね
2022/10/15(土) 01:53:05.91ID:gy4T8Zz60
df_merged = pd.concat([df.iloc[:, 0], df.iloc[:, 2]], axis=1)
2022/10/15(土) 08:25:41.38ID:w1fQiwU/0
iloc()じゃなくてiloc[]の時点で、何しとるのかよく判らん
2022/10/15(土) 10:37:21.32ID:Awb5Gbls0
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.iloc.html
ドキュメント嫁
299デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/15(土) 14:09:18.62ID:wUAlKc2l0
質問です。
配列内にアルファベットの要素がランダムに複数個入っています。
これらの要素をなるべく隣り合わないように並べ替えるにはどうするといいでしょうか?
例:AAABBC -> ABACAB
2022/10/15(土) 14:14:45.53ID:w1fQiwU/0
不可能なパターンがあるな
2022/10/15(土) 14:20:59.88ID:1JUKlkYAM
>>299
なるべくっていう処理はコンピュータには不可能
きっちり仕様として示せる処理でなければならない
2022/10/15(土) 14:30:34.17ID:ttRM3D3c0
>>299
隣合うのが不可避の場合どうするのか
前に溜めるのか後ろに溜めるのか
2文字ずつ並ぶ→3文字ずつ並ぶのように緩和するのか
2022/10/15(土) 14:38:02.16ID:PHpzEK3Ka
>>301
最短を目指すとかよくあると思うけど
304デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/15(土) 14:45:59.33ID:wUAlKc2l0
>>302
前後に貯めるのではなく、2文字ずつ並ぶ→3文字ずつ並ぶのように緩和できるようにしたいです。
例:AAAAAABBC -> AABAACABA
2022/10/15(土) 14:49:24.73ID:w1fQiwU/0
AABAACABA はNG箇所が2だけれど、
AAABACABA にすると1箇所で済む

2連続2箇所よりも3連続1箇所の方がスコアが低くなる評価関数の定義が必要
306デフォルトの名無しさん (ワッチョイ 0f10-cJ6U)
垢版 |
2022/10/15(土) 14:49:49.52ID:VXb7W7XW0
こういうパズル的なのはプログラミングお題スレで出題する方が早く回答が付きそうだな
307デフォルトの名無しさん (ワッチョイ 0f10-cJ6U)
垢版 |
2022/10/15(土) 14:51:37.73ID:VXb7W7XW0
>>305
n連続は1箇所につき2^n点のペナルティを課すとかは?
2022/10/15(土) 14:55:21.58ID:1JUKlkYAM
>>306
いや、ていうかよく考えたらこの質問Python関係ないじゃんね
309デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/15(土) 15:03:04.47ID:wUAlKc2l0
>>308
すいません。
使っているのがpythonだったのでここで質問しました。

やはり難しいようなので、皆さんのコメントを参考に自力で考えてみようと思います。
ありがとうございました。
2022/10/15(土) 15:15:21.01ID:ttRM3D3c0
>>304
26要素のリストで各文字の個数をカウント
最大のものを見つけ出す
最大/他全部で連続個数が分かる
最大の文字を連続個数並べて他の文字を順番に挟む
挟む時は各文字の文字数をつじつま合うようにリストをカウントダウンして調整

同じ文字は可能な限り離したいとか条件追加するともっと難しくなる
2022/10/15(土) 15:17:51.26ID:ubtsaD1N0
>>300
ちゃんと確認してないけど、交互に置けない場合が条件になるのかな?

不可能条件
最頻出文字数 > 文字総数/2
かな
2022/10/15(土) 15:17:59.84ID:ttRM3D3c0
文字の挿入は総数がつじつま合うようにもっと工夫が必要だな
まあ頑張ってくれ
2022/10/15(土) 15:18:54.05ID:ubtsaD1N0
かぶった上に劣化だった><
314デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/15(土) 15:33:35.79ID:wUAlKc2l0
>>310
>>311

ありがとうございます。
試してみます。
2022/10/15(土) 15:53:38.83ID:2u2iBEwS0
>>303
「なるべく」は結果についての話
最短は手順の話だから違うよね
2022/10/15(土) 16:21:01.13ID:w1fQiwU/0
ガチでなるべくなヒューリスティックな問題の方が現実には多い
2022/10/15(土) 16:39:39.77ID:ywjmScUEa
>>315
今回は結果の話しかないよな
2022/10/15(土) 17:41:55.96ID:Hv7z/9nw0
思いつきだけど
[合計文字数][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
2022/10/15(土) 17:50:25.10ID:ttRM3D3c0
>>318
合計じゃなくて最大個数の文字数でいいな
2022/10/15(土) 18:29:11.63ID:a1geBJ2n0
for文の途中で条件に当てはまったら、for文の任意の値から処理を再開させる書き方とかありますか?
例えば「for x in range(10):」とあったとして、7の途中で条件に当てはまったら、3から再開してそのまま最後まで処理するみたいな
321デフォルトの名無しさん (ワッチョイ 0f10-cJ6U)
垢版 |
2022/10/15(土) 18:32:12.78ID:VXb7W7XW0
while使った方がいい
2022/10/15(土) 18:48:06.23ID:w1fQiwU/0
処理で条件が変わるような場合は、whileにしてもハマる
いつ終わるか判らないようなループは本質的に不安定
2022/10/15(土) 18:48:39.13ID:i+M+Mx9R0
再帰でいいのでは?
2022/10/15(土) 18:52:19.28ID:2u2iBEwS0
>>320
そういうジェネレータ作ってrangeと置き換えればいいんじゃね
2022/10/15(土) 19:03:32.69ID:jl8SG5IY0
あんま綺麗じゃないけど、こんな感じでいいのか?
競プロの連中ならもっとスマートなの書いてくれるはず

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)
2022/10/15(土) 19:10:00.74ID:jl8SG5IY0
よく見たら、聞くまでもなくダメなやつだなすまん
2022/10/15(土) 19:57:10.99ID:icx3tYx0M
>>325
とりあえずcollectionsのCounterだけは覚えようか
2022/10/15(土) 20:30:20.03ID:Hv7z/9nw0
Numpyで作ってみたで
https://ideone.com/nQcfVW
2022/10/15(土) 20:30:36.10ID:Ji35UDrea
きったね
2022/10/15(土) 20:48:46.65ID:jl8SG5IY0
>>325
ありがとう

このソートって思ったよりも難しいな
ツリー構造は理解できねえわ
2022/10/15(土) 21:15:49.97ID:jl8SG5IY0
アンカミスってた

>>327
ありがとう
2022/10/16(日) 01:02:14.69ID:moLuv1n40
>>299
https://ideone.com/b6vqgk
すごーく分かりづらいけど、2種類に分けて導き出した
区切り文字中心に考えたのに、そこで処理を分けてない体たらく
あと、同じ文字は出来るだけ遠く?は難しかった

〆切ってそうな話題ですまん、Python覚えたくてやってみた
333デフォルトの名無しさん (ワッチョイ 6b01-apoB)
垢版 |
2022/10/16(日) 20:28:46.68ID:MD6QHwBW0
質問です。
vscordとpycharmと他のパイソン系なのですが
「マルチグラボ」対応してるのを探してます。
お勧めはありますか?
334デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/16(日) 20:56:42.88ID:tl8sUwzf0
Windowsで作成した画像を外付けHDDに保存する。
※macとWindows共通で使えるFAT32使用
それをmacPCのpythonのglobで画像のパスを読み込んだ時に
「バスケ」や「ポケモン」などの濁点と半濁点の検索ができません。
※printで中身を見るとあります。
原因や対処方法がありましたら教えて下さい。
2022/10/16(日) 21:20:40.98ID:F/Fiy6Pc0
unicodedata.normalize()
2022/10/16(日) 21:28:07.05ID:cG9YvU2e0
あれはあれでunicodeなんだよな
統一できてない
337デフォルトの名無しさん (ワッチョイ 9f89-2yG4)
垢版 |
2022/10/16(日) 21:50:36.51ID:tl8sUwzf0
>>335
ありがとうございます。
うまくできました。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況