Pythonのお勉強 Part66

■ このスレッドは過去ログ倉庫に格納されています
2021/11/12(金) 07:48:11.11ID:vp8lzav70
!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://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Pythonオフィシャルサイト http://www.python.org/
◇まとめwiki ttp://python.rdy.jp/

●関連スレ● 自称初心者は↓へ
【まず1嫁】くだすれPython(超初心者用) その55
https://mevius.5ch.net/test/read.cgi/tech/1633070807/

〇前スレ〇
Pythonのお勉強 Part65
https://mevius.5ch.net/test/read.cgi/tech/1621749112/

次スレの建立は>>985が挑戦する。(980通過して24h後も落ちなくなった)
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2021/12/20(月) 20:24:35.62ID:sn5XhEky0
何が違うのか判らん
569デフォルトの名無しさん (ワッチョイ 4f33-g56a)
垢版 |
2021/12/20(月) 20:39:54.46ID:4NByXHes0
Cから入ると組み込み関数名を変数に使うことに抵抗なくなる?
それとも>>567が特殊なの?
2021/12/20(月) 20:50:17.97ID:sn5XhEky0
i = 1
といきなり書いてokなんだから、
d['a'] = 1
a[1] = 1
もいいやろと思うんだけど
571デフォルトの名無しさん (ワッチョイ 4a36-qxFW)
垢版 |
2021/12/20(月) 21:03:52.20ID:S8OedEgF0
数値はいいとして、普通はアドレスが格納されるから
list配列に値をいれて、そのlistのアドレスをdictに格納する。ってのが手順だよね。

まあ、いいか。気にしないでww
2021/12/20(月) 21:23:50.21ID:sn5XhEky0
宣言が必要と思うのは、入れ物を用意しないとと思うからで、
int i
と書くと整数の入れ物が、
float i
と書くと実数の入れ物が用意される

でもpythonは、いきなり
i = 1
と書くと整数が入るし、
i = 'abc'
だと文字列が入る

自由すぎやろと
何かの哲学に違反してねえかと

実際には、オブジェクトの入れ物でしか無いから、中身は何でもいいんだよな
2021/12/20(月) 21:25:46.04ID:EghhPRvN0
たまにnewしたくなるときがなくもない
実際したところでだから何が巻き起こるだけだけど
2021/12/20(月) 21:27:19.10ID:EWzfdFH+0
加齢臭がハンパないスレですね
575デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/20(月) 21:41:02.13ID:ceMzU2Ib0
カレーの匂い。
576デフォルトの名無しさん (ワッチョイ a301-izju)
垢版 |
2021/12/20(月) 21:47:39.96ID:ceMzU2Ib0
カレー味のウンコの匂い。
2021/12/20(月) 21:59:32.19ID:nWR8HCa10
>>572
void *a=new 10;
void *b=new 0.0;
void *c=new "abc";

Cだとこんな感じじゃねえの?
2021/12/20(月) 22:02:58.91ID:WrxYXVvN0
C言語にnewはない
579デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:08:39.93ID:LaroeVvp0
アルゴリズムの問題で解けないやつがあるんですが、ここで聞くのはスレチですか?
2021/12/20(月) 22:11:35.11ID:dz5/LnJn0
C++と思えば?
2021/12/20(月) 22:12:58.25ID:WrxYXVvN0
似てるけど別のもの
コンパイルが通らない
2021/12/20(月) 22:14:19.44ID:WrxYXVvN0
>>579
Python限定のお題になるなら構わないのでは無いかな?
お勉強スレだし
583デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:16:38.83ID:LaroeVvp0
Pythonの解くことを前提に与えられた問題なのですが、多分Python以外でも解けると思います。
一応投下させてください。
[問題]
n人の人間の身長が与えられる。
このn人を1列に並ばせるとき、「各々の人間において、自分より身長が高い人間が自分より前に1人以下である」という条件を課した際に、並び方は何通りあるか求めよ。
ただし、同じ身長の人間が複数人いるものとする。

方針だけでもいいので、教えて頂けると幸いです。
2021/12/20(月) 22:16:52.26ID:dz5/LnJn0
組み込みじゃないパソコン向けは++だよ。
2021/12/20(月) 22:16:52.71ID:EghhPRvN0
>>579
基本的にテスト問題は外部に漏らすのNGだから
サイトの規約をちゃんと守ってくれな
586デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:20:53.13ID:LaroeVvp0
>>585
友人から相談された問題なのですが、確かにテスト問題の可能性がありますね。
確認しておきます。
2021/12/20(月) 22:23:58.82ID:sn5XhEky0
前に0人ならばただのソートなので1通り+同じ身長同士の入れ替えの組み合わせ
それを1人限定で崩していいので、崩し方のパターンだけ増やす
588デフォルトの名無しさん (ワッチョイ ea55-MOPJ)
垢版 |
2021/12/20(月) 22:29:28.14ID:2brWBIvz0
>>583

>ただし、同じ身長の人間が複数人いるものとする。

この条件はどう効いてくるのでしょうか?
n 人の身長を h_1, …, h_n とするとき、 #{h_1, …, h_n} = n となる場合をなぜ除外しているのか?
589デフォルトの名無しさん (ワッチョイ ea55-MOPJ)
垢版 |
2021/12/20(月) 22:32:40.36ID:2brWBIvz0
もちろん、この問題は速いアルゴリズムじゃないと駄目なんですよね?
590デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:33:02.10ID:LaroeVvp0
>>587
151, 150, 153, 152 …(cm 略)
の並び方も考えられるので、ソートを崩していいのは1人限定とは限らないと考えました
591デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:34:52.54ID:LaroeVvp0
>>588
分からないです…
少し問題が複雑になるんですかね?
592デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 22:36:20.06ID:LaroeVvp0
>>589
速さに関する制約はないと思いますが、流石に全並びを考えてカウントするのは違う気がします
2021/12/20(月) 22:56:10.96ID:sn5XhEky0
なるほど
ざっくりソートされてれば細かい部分で無数に違反してていいのか
151 150 153 152 153
でもokなので、同じ身長を1つに縮退させることがそもそも無理

これは、とりあえず片端からやってみて、違反したらバックトラックして、
みたいに数えていくしかないのでは
594デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/20(月) 23:12:03.13ID:LaroeVvp0
>>593
やっぱり、ほぼ全通り考えるしかないんですかね…

あと関係ないですけどアルゴリズムの世界でも縮退って言葉使うんですね笑
2021/12/20(月) 23:28:55.61ID:nWR8HCa10
数学問題やね

まず同じ身長の奴がいない場合の並び方はA(N)通りとすると
A(1)=1
A(2)=2=2^1
A(3)=4=2^2
A(4)=8=2^3
...
A(N)=2^N通り

同じ身長の奴がいる場合はちょっと複雑
これをB(N)通りとすると
N人の中に150cmが3人いる場合
B(N)=A(N-2)*(3*2)
N人の中に150cmが3人と152cmが2人
B(N)=A(N-3)*(3*2)*(2)
2021/12/20(月) 23:37:02.50ID:nWR8HCa10
訂正:A(N)=2^(N-1)

A(N)=A(N-1)*2となることを証明すればいい
2021/12/20(月) 23:54:28.57ID:2rYNI2GJ0
分割統治でやって欲しいんじゃないの

ソート済みの状態から一番高い身長のやつをピボットにして左半分と右半分の問題に分割
右半分は同じ身長のみ入れ替え可能
左半分は一番高い身長のやつをピボットにしてさら左半分と右半分の問題に分割
左半分が1人になったらピボットの位置を移動させる
598デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/21(火) 00:03:41.16ID:0/0mhKq10
>>595
A(N)=A(N-1)*2の証明を考えてみましたが、思いつきませんでした…
あとB(N)の計算例が何故そうなるのか理解できません🙇
599デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/21(火) 00:04:48.55ID:0/0mhKq10
>>597
具体的な操作のイメージが分からないです…
2021/12/21(火) 00:29:01.50ID:+okGxHMi0
こんな感じか?
https://wandbox.org/permlink/8ZVMC6e2OxO4cOn3
601デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/21(火) 00:54:36.36ID:0/0mhKq10
>>600
コードの理解に努めましたが、難しいです…
ヒントを頂けないでしょうか🙇
2021/12/21(火) 06:25:11.98ID:wN0nPlTy0
>>593
Amortized sortって奴だね
2021/12/21(火) 07:07:48.53ID:meTPjnW+0
>>598
A(N)=A(N-1)*2の証明
時間がないから手っ取り早くヒント

背の高さでソートされた順列(a,b,c,...,x,y,z)があるとする
ここで一番背の高いzの位置に注目するのがポイント

zが一番後ろにいる場合を (abc...xy)zとする
ここで(abc...xy)の並び方の数をZ(N,1)とする
Z(N,1)=A(abc...xy)=A(N-1)

zが後ろから2番目にいる場合は
(abc...x)zy 
Z(N,2)=A(abc...x)=A(N-2)

整理すると
Z(N,1)=A(N-1)
Z(N,2)=A(N-2)
...
Z(N,N-1)=A(2)
Z(N,N)=A(1)

よって
A(N)=A(1)+A(2)+....A(N-2)+A(N-1)
変形して
A(N)-A(N-1)=A(1)+A(2)+....A(N-2)
すなわち
A(N)-A(N-1)=A(N-1)
A(N)=2*A(N-1)
2021/12/21(火) 08:46:56.71ID:04IauV3F0
君はテスト問題でないことが確定されるまでは参加禁止なのでは
2021/12/21(火) 09:41:15.85ID:+okGxHMi0
うーん場合分けは不要だったしちゃんと整理してから出せばよかったな
https://wandbox.org/permlink/U69DxyJb2ELWD78B
606デフォルトの名無しさん (ワッチョイ b3ad-j66Y)
垢版 |
2021/12/21(火) 10:22:33.61ID:0/0mhKq10
皆様、大変勉強になりました。
ありがとうございました。

この問題を聞いてきた人は、友人と言っても連絡先も知らない、週一でしか会わないクラスメイトなので、確認には少々時間がかかると思います。
>>604
この方の言う通りなので、ご教示はここまでで大丈夫です。

繰り返しになりますが、ありがとうございました。
2021/12/21(火) 10:25:33.80ID:TtujsDmTd
ぱっと見DP使わせるような問題に見えるし
どこかのコーディングテストの転載臭い
2021/12/21(火) 10:50:28.08ID:04IauV3F0
DPって何通りあるか計算できるの?
2021/12/21(火) 22:56:32.12ID:04IauV3F0
in placeなものとそうでないものが混ざってていちいち引っかかる
2021/12/22(水) 09:15:13.63ID:/f6dB3Se0
new_list = old_list.append(1)
old_list.append(1)

new_str = old_str.replace('aaa', 'bbb')
old_str.replace('aaa', 'bbb')

new_list = old_list.sort()
old_list.sort()

new_list = old_list.sorted()
old_list.sorted()

どっちが正しいでしょうと、pythonをよく知らない人に聞いても正しく答えられない
個別に覚えるしかないというのは辛い
2021/12/22(水) 09:19:13.50ID:tLI1n5rc0
お前もよく知らないだけだろ
2021/12/22(水) 09:51:11.06ID:/f6dB3Se0
pandasだと、基本的には非破壊で、
inplace=True
を付けると破壊的に処理する

sortみたいに、replaceとreplacedを用意するというのでもいい
デフォルトがどちらかに寄ってるべき
2021/12/22(水) 11:12:03.22ID:HgZu4pcO0
Pythonは全部破壊的変更だが
2021/12/22(水) 11:57:09.52ID:BoOcuWzad
破壊的というか、参照渡しだから同じもの見てるだけ
値で渡したかったら、つまり別々のものを見るようにしたかったら
空スライスまたはコピー関数で値をコピーするか
ミュータブルに一度変換して対象オブジェクトに再変換するかでいい

こう考えたらnewしたいな、と感じるときもある
だから関数設計するときも紛らわしさを考慮してリターンするオブジェクトは
関数内で新しく作ったものを出すようにした方が誤りが減る
2021/12/22(水) 17:46:32.03ID:/f6dB3Se0
ヘッダ
中身
ヘッダ
中身
...

というデータがあって、中身の数は不定
これをそれぞれのブロック毎に処理したい
シーケンシャルにやると、とりあえず次の行を読んでみて、
ヘッダだったらプールしておいたブロックを処理して、ブロック切り替え
そして、全部読み終わった時にもプールしてあるブロックを処理する

いかにも嫌なので、一度全部読み込んで、部分リストに分割して処理したい
でも、普通にやると部分リスト分割のところで、とりあえず次の行を読んでみて、になるので、
リストを一発でsplitしたい
splitのlist版みたいなのは無い?
厳密にはセパレータも残すのでsplitとも違うけど
2021/12/22(水) 21:45:12.58ID:/8KUW41f0
正規表現で
2021/12/22(水) 22:30:11.21ID:inR83KhS0
splitも次の要素をみてから判断してるにちがいないけど
じぶんのコードで書きたくないってこと?
ヘッダや中身も同時にパースできるし同じく正規表現(re.finditerあたり)推す
2021/12/22(水) 22:30:55.64ID:/f6dB3Se0
だから文字列じゃないんだってば
2021/12/22(水) 22:39:25.23ID:/8KUW41f0
じゃあ正規表現で
2021/12/22(水) 22:43:37.97ID:DICDdkFu0
バイナリデータなのか?
2021/12/22(水) 22:45:36.59ID:inR83KhS0
次の行ってのが論理的な要素を指してて実体はlist(iterable)ってんなら
more-itertoolsのsplit_beforeとか

バイナリなら書きづらいけどぜんぜん正規表現でいける
2021/12/22(水) 22:53:23.32ID:/f6dB3Se0
実体はopenpyxlのセルオブジェクトのlistなんだけどね
無理やりくっつけて正規表現でやっつけても、その後が困るのでlistで処理するしか
numpyのsplitが使えそう
2021/12/22(水) 23:35:23.55ID:/8KUW41f0
正規表現がいやならpeekable iteratorで
624デフォルトの名無しさん (ワッチョイ 4f33-g56a)
垢版 |
2021/12/22(水) 23:48:36.46ID:5pcWLKDp0
>>615
本来、そのデータを受け取る側はどうやって処理してるの?
2021/12/23(木) 03:26:08.15ID:uxCnZncsa
リストを逆から処理していってブロックのリスト作るだけでは
2021/12/23(木) 05:22:40.25ID:bOXEGJaS0
>>615
プログラマ向いてない
意味のないこだわりで問題を難しくするタイプ
2021/12/23(木) 06:08:20.68ID:W/nbBjGX0
>>622
処理速度とか気にしないなら自前で書いたほうが融通が利くだろうよ
でもヘッダとコンテンツというブロック構造は頻繁に現れるデータ構造だから一般化したものを使いたいね

この形はDB形式そのもの
sqlに落として使うのもいいかもな
2021/12/23(木) 07:01:17.49ID:4lpi36cc0
使い捨てのプログラムで、この拘りだったら永遠に考えとけって話だよなぁ
2021/12/23(木) 07:39:18.70ID:df0C7LZ20
listをsplitしたいという質問に対して、答えが判った今なら、
そんなもんはnumpyで一発でできるよ、という簡単な問いにしか見えない

ごちゃごちゃ変な回答してる人はどうせnumpy知らないんでしょ?
2021/12/23(木) 08:49:38.53ID:qBBxA2lI0
おっぱいは正義
2021/12/23(木) 09:55:17.80ID:uxCnZncsa
いるよな
こういう人
2021/12/23(木) 13:59:07.99ID:4BWUo4Pe0
ちょっと教えてほしいんだけど、print関数で出力される文字列を
変数に入れたいんだけどどうしたらいいだろう?
printと似たようなstringを返す関数を作れるならそれでもいいんだけど
カンマ区切りで複数パラメータを渡せる宣言がわからない
2021/12/23(木) 14:08:58.31ID:rKR7g5HU0
>>632
https://docs.python.org/ja/3/library/functions.html#print
> str() がするように文字列に変換
公式に書いてる
2021/12/23(木) 14:19:33.68ID:3yOXD4ws0
formatやf-stringのことかな

val = 123
a = f'残金{val}円'
または
a " '残金{}円'.format(val)
2021/12/23(木) 14:21:13.64ID:3yOXD4ws0
下の"は=の打ち間違い
636デフォルトの名無しさん (ワッチョイ 4f33-g56a)
垢版 |
2021/12/23(木) 14:49:22.66ID:qzls8RBa0
>>632
>>> def f(*args): return args

>>> f('abc', 'def', 'ghi')
('abc', 'def', 'ghi')

こういうことではなくて?
2021/12/23(木) 16:25:58.39ID:4BWUo4Pe0
>>636
それだとタプルで返ってくるだけで
文字列になってなくない?
2021/12/23(木) 16:35:06.82ID:dblhs2tn0
そこまで面倒見てもらわにゃならんのかw
639デフォルトの名無しさん (アウアウエー Sae2-RmhO)
垢版 |
2021/12/23(木) 16:46:24.32ID:wVsy9mb3a
msg = 'a,b,c'
print(msg)
values = msg.split(',')

こういうこと?
2021/12/23(木) 17:47:50.08ID:IBpnZJhO0
みてください
2021/12/23(木) 18:20:49.76ID:4BWUo4Pe0
ありがとう解決しました。
2021/12/23(木) 19:09:00.65ID:p+r9sE2/0
>>629
numpyでやってみせて
ぜひ
643デフォルトの名無しさん (ワッチョイ be10-w0pt)
垢版 |
2021/12/23(木) 19:33:07.91ID:lssFGhba0
>>629
numpy覚えたてみたいでかわいい
2021/12/23(木) 19:47:43.54ID:mMsR/cF20
仕事でnumpy使ってるけど未だによく分からないことあるな
2021/12/23(木) 22:06:57.32ID:oyXOfuSO6
まとまったメモリ確保して関数に渡すためだけにstructured array使ってる
2021/12/23(木) 22:51:15.20ID:df0C7LZ20
import numpy as np
l = [-1, 1, 2, 3, -1, 1, 2, -1, 3, 4]
header_position = list(filter(lambda x: l[x] == -1, range(len(l))))
for a in np.split(l, header_position):
print(a)

-1だとヘッダだとする
ヘッダ位置のリストをsplitの第2引数に渡すと、その場所でsplitしたarrayのlistが得られる
先頭のは要らないので捨てる
2021/12/23(木) 23:14:40.77ID:zCNeJPRa0
>>> import more_itertools
>>> l = [-1, 1, 2, 3, -1, 1, 2, -1, 3, 4]
>>> iter = more_itertools.split_before(l, lambda x: x == -1)
>>> list(iter)
[[-1, 1, 2, 3], [-1, 1, 2], [-1, 3, 4]]
648デフォルトの名無しさん (ワッチョイ 5d36-rb6c)
垢版 |
2021/12/24(金) 06:48:08.59ID:v3ycTrGF0
よく、more_itertoolsなんて知ってるね。
2021/12/24(金) 11:34:27.22ID:J23vcQI9M
numpyだけじゃなくpythonも覚えたてだったか
2021/12/24(金) 14:30:18.61ID:G9Y5EdGy0
python覚えたてチェック

yield使ったことある?
2021/12/24(金) 15:11:24.82ID:5MBwlF320
C#でつかいました
2021/12/24(金) 17:25:55.08ID:Nn/03+5S0
痛くしないでねハート
2021/12/24(金) 18:09:40.24ID:cMhJNtck0
>>646
俺の知ってる一発とは意味が違ってた

それはともかく
1周で済むところを2周して
split後に先頭が空配列なら捨てる処理も必要で
シーケンス限定なのでちょっとキツイかも
2021/12/24(金) 18:18:59.15ID:G9Y5EdGy0
この後、分割したリストに対してメインの処理をするので3周だよ
2021/12/26(日) 11:22:31.20ID:p3QxfO7m0
先日Pythonに入門したビギナーですけど、おおむねPythonは便利ですね。
プログラミング言語というよりはどっちかっていうと利便性の高い道具といった感じです。
道具なのでこれで業務システムは作りたくないけど、これがあると業務のめんどくさいところをいろいろ楽にできるといったイメージ。
加えてライブラリ類が超強力なのばっかりなので『そりゃ、これは流行るわ』と思いました。

いまんとこの不満はスタックトレースがASCじゃなくてDESCならよかったなーっていうのと
switch〜caseがほしいなーっていうのと、
三項演算子ほしなーっていうのくらいですね。
2021/12/26(日) 11:23:30.05ID:MmrJg2Uh0
チラウラ
2021/12/26(日) 11:41:09.08ID:0RqE/nlm0
文句は一人で壁に向かって
2021/12/26(日) 12:12:41.08ID:Pa0hIbgE0
urllib.requestで足りるんだけどエラー処理を自分でやらないと止まる
もう少し安全にしたモジュールないかな
2021/12/26(日) 12:20:07.54ID:BGcOWLCe0
requestsはだめなん
2021/12/26(日) 13:02:44.42ID:4NpXv1fj0
>>655
Python 3.10からパターンマッチ
2021/12/26(日) 17:15:39.98ID:Xt1KUxKEa
いい感じのGraphQLライブラリないかなと探してて見つけたTartifletteが最強だった
さらっとGraphQLいじりたいならgrapheneがあるけどこれ微妙なんだよね
Tartifletteマジおすすめ
2021/12/26(日) 17:48:55.27ID:go+9Hwgza
認定試験2回も落ちた…
プログラミングしてる人ほんとすごいわ尊敬する
2021/12/26(日) 17:54:33.56ID:v0ik1B7Yd
基礎の方?
2021/12/26(日) 18:03:37.10ID:go+9Hwgza
そうです。
社会人なのですが勉強がとても苦手で、合格率高いって聞いてほんと凄いなと思ってます。
エラーと例外が意味わからん…
2021/12/26(日) 18:12:13.74ID:Pa0hIbgE0
エラーと例外の区別は言語によるけど、pythonの場合は
止まってしまうのがエラー、回避できるのが例外
2021/12/26(日) 18:19:41.97ID:go+9Hwgza
>>665
ありがとうございます。
今年中には受かりたかったのですが、三度目の正直でがんばります。
2021/12/26(日) 19:55:23.10ID:mNkfpvhP0
PythonでカッコイイGUI作れるライブラリないですか?
Tkinter使ってるんですがいまいち見た目が古いです
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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