[過去ログ] Pythonのお勉強 Part68 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
608: (ワッチョイ 1379-87TA) 2022/11/02(水)19:40 ID:rAnbDRgM0(1/2) AAS
適当にリンクリストあたりかと思ってた
609
(2): (ワッチョイ d347-gj4s) 2022/11/02(水)19:40 ID:ul/vZuFO0(4/4) AAS
appendしても同じオブジェクトという時点で違和感があるんだよな
明らかに別物やん

仮にappendが非破壊で
list = list.append()
とした時にidが変わる方が納得できる
610: (アウアウウー Sa9d-5cND) 2022/11/02(水)19:40 ID:5K2+hbiBa(2/3) AAS
>>605
逆だよ
ob_item自体は大きさが変わる時にreallocでアドレスが変わるけど
中身の方はポインタをコピーするだけだから変わらない
611
(1): (アウアウウー Sa9d-mHKc) 2022/11/02(水)19:42 ID:1xZXeW2Ya(5/6) AAS
>>597
違うって理解できた?
612: (アウアウウー Sa9d-5cND) 2022/11/02(水)19:51 ID:5K2+hbiBa(3/3) AAS
>>609
そもそもが全部Cで実装されてるんだからそういうメモリモデルなんだ、という理解で良いと思うよ
613
(1): (ブーイモ MM8d-YnjT) 2022/11/02(水)19:53 ID:4MCwg8YuM(2/2) AAS
>>611
あなたは何もわかってないのは理解できました
614: (アウアウウー Sa9d-mHKc) 2022/11/02(水)19:57 ID:1xZXeW2Ya(6/6) AAS
>>613
わかんない?
違うよ
どんどん主張が後退するんじゃねえかなという期待の下、繰り返すけど
615
(1): (ワッチョイ 7997-uk66) 2022/11/02(水)21:11 ID:CsBXjP5R0(1/4) AAS
リンクリストはリスト的なものを作るときに第一の選択肢としてはこないと思うよ。
任意の要素へのアクセスがO(n)かかるから。
必ず頭から順番に読んで、途中に挿入したいことが多いとかいう状況だったら使うけど、こういう特性を、癖があると思う人の方が多いんじゃないかな。
そういうコンピュータサイエンスの初歩みたいなところの実装が気になるなら、Javaを勉強してみるといいかもね。
リストも辞書もセットも、複数の実装方法が標準で用意されてて明示的にどれを使うか決めなくちゃいけないから。
そう考えると初心者にJava教えてた頃ってコレクションで付いていけなくなり勉強を諦めた人多いんだろうか。
616: (ワッチョイ 7997-uk66) 2022/11/02(水)21:16 ID:CsBXjP5R0(2/4) AAS
>>609
夕飯を食べる前の自分と食べた後の自分は別のインスタンスか?って問いにyesと答えられるならばイミュータブルなものにしかidを付けてはいけないと考えているのだろう(そういう言語もある、Haskellとか)
そうでなければ、ミュータブルなインスタンスはミュータブルなんだからidが同じでも中身は変化すると考えるべきだろう
617
(1): (ワッチョイ d347-gj4s) 2022/11/02(水)21:22 ID:jJasVlr90(1) AAS
idってCでのアドレスそのものなんでしょ
実装の都合でアドレスが変わったらidも変わるというだけの話で、
何らかのポリシーみたいなものは背景に無いような
618: (ワッチョイ 7997-uk66) 2022/11/02(水)21:30 ID:CsBXjP5R0(3/4) AAS
>>617
CPythonではな。(すみません知りませんでした)
しかしGCがかかりまくるVM上で動くPythonの実装もあるから、CPythonではそうっていう認識に留めておいたほうがいいんじゃないかなあ。
619
(1): (ワッチョイ d347-gj4s) 2022/11/02(水)21:42 ID:2orW5ow60(1) AAS
idが変わる/変わらないとミュータブル/イミュータブルは一対一対応?
620: (ワッチョイ 7997-uk66) 2022/11/02(水)22:06 ID:CsBXjP5R0(4/4) AAS
>>619
まず、イミュータブルというのをどう定義するかによると思うけど
(タプルはイミュータブルだが、タプルの中にリストを入れた場合、リストほミュータブルで、リストに変更を加えてもタプルのインスタンスが新しくできるわけではない)
そういうややこしい例を除いても、
イミュータブルならば、値を変えたらidが変わる
値を変えてもidが変わらないならミュータブル
しか言えないんじゃない?
621: (ワッチョイ d347-gj4s) 2022/11/02(水)22:13 ID:F9kh54e50(1) AAS
定義や実装で何がミュータブルかがころころ変わってはいけなくて、
pythonではどんな環境でも同じものがミュータブルであるべき

で、idが変わる/変わらないが環境依存ならば、idとミュータブルは関係ないことになる
622: (ワッチョイ d9f0-5cND) 2022/11/02(水)22:18 ID:jyU6y3CY0(6/6) AAS
わけわからん
623
(1): (ワントンキン MMd3-+Dbv) 2022/11/02(水)22:20 ID:yCeW62XuM(1) AAS
pythonの辞書ってc++のmapと違って内部でソートされてないからアクセス遅いっぽいんだよね
keysで取り出しても登録した順だし
文字列でも数値でもキーにできるからそういうものなのか
624
(1): (ワッチョイ 1379-87TA) 2022/11/02(水)22:50 ID:rAnbDRgM0(2/2) AAS
>>615
最後尾への追加削除がO(1)だったからリンクリストだと思ったけど
リアロケートの実装でどうにかそれっぽくなるんだねぇ
全く気にしてなかったけど、勉強になったわ
625: (ワッチョイ d347-gj4s) 2022/11/02(水)22:58 ID:P6hHm0TD0(1) AAS
ループで一つずつappendしていくようなコードは、
溜めておいて一気にどーんで高速化できそう
626: (ワッチョイ 694f-hZr9) 2022/11/02(水)23:13 ID:Vdzb0Lkj0(1) AAS
Elixir なんて片方向リストだから、先頭の要素の追加・削除のみ速い。
末尾では全要素をたどる

Ruby は両方向リストだったかな?
627: (ワッチョイ 8b10-WE8j) 2022/11/02(水)23:41 ID:d827SSNz0(1) AAS
>>623
pythonの辞書は順番を保持することが仕様で規定されてる
628: (ワッチョイ 8b89-g96c) 2022/11/03(木)00:20 ID:gcHdWorI0(1) AAS
3年くらい前からだっけ?
キーバリューやから順番気にしたことなかったわ
629: (ワッチョイ d347-gj4s) 2022/11/03(木)00:37 ID:vWeFXHff0(1) AAS
順番が同じだとセキュリティの問題があるから意図的にランダムにしてなかったっけ
630: (ワッチョイ 7997-uk66) 2022/11/03(木)00:45 ID:9oLRzF140(1/2) AAS
>>624
C++のvectorとか、JavaのArrayListの典型的な実装だと、リアロケートが発生するときに倍ぐらいの領域を予め確保しておく、ってのが普通って読んだな
コードレベルで読んだ訳じゃないから確たるエビデンスがあるわけじゃないけど。
631: (ワッチョイ 7997-uk66) 2022/11/03(木)00:49 ID:9oLRzF140(2/2) AAS
辞書は3.5だかそのぐらいで入れた順になるように仕様が決まったよね
それまではバラバラだったはず
あとソート済みが欲しいならsortedcollectionsがあるんじゃないの
Pythonでパフォーマンス気にするようなコード書いたことないから速くなるかは知らないが
パフォーマンス気になるならもう普通にpybind11よ
632: (ワッチョイ 8b46-g96c) 2022/11/03(木)01:13 ID:t2qUW0n10(1/3) AAS
動的配列は償却計算量の典型例だぞ
633: (ワッチョイ 13ad-ww+g) 2022/11/03(木)09:06 ID:b87ZSO0X0(1) AAS
半島人w
634: (ワッチョイ 9397-pRvw) 2022/11/03(木)13:19 ID:M31+WIXk0(1) AAS
ネトウヨはコードすら書けない
635
(4): (ワッチョイ 692c-3A4z) 2022/11/03(木)17:39 ID:JzcJhjtx0(1) AAS
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ではどうやって高速化できますか?
636: (ワッチョイ d347-gj4s) 2022/11/03(木)17:50 ID:6cc1wOit0(1) AAS
全角スペースでインデントするといい
637
(1): (ワッチョイ 8b46-g96c) 2022/11/03(木)17:57 ID:t2qUW0n10(2/3) AAS
エラトステネスの篩みたいなまともなアルゴリズムを使え
1-
あと 365 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.013s