X



くだすれPython(超初心者用) その52【まず1嫁】

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
垢版 |
2021/01/09(土) 05:22:25.24ID:IpHIsox4
当スレに★Python以外のプログラミング言語での回答類を書くべからず★
派生言語はそれぞれ専スレがあるのでそっち池。
「Ruby」「某言語では」をNGワード登録推奨。荒らしは、完全スルー放置が一番きらいです。

このスレッドは「お勉強」スレのほうには書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を、勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますので、お礼は Python の布教と初心者の救済をお願いします。

★エラーを解決したい場合は、
  表示されてるエラー全文(勝手に省略やスクショうp等の横着クソ行為禁止)と、
  実行環境(Pythonのバージョン・OSとIDEの種類とバージョン)をシッカリ書くこと。

【【【複数の連続半角スペースはなかったことになる・タブがうまく入らない5chの仕様】】】に注意!
Pythonの★ソースコードをそのまま5ちゃんにコピペすると、インデントが崩れてチヌ★ので
  ↓等の、いわゆるコードうp用サイトに貼ってこいください。
ttps://techiedelight.com/compiler/  Run Code機能あり。
ttp://ideone.com/      デフォ設定はC用のため、言語選択ボタン押下がピコ手間かも。
ttp://codepad.org/      ほぼ直感的に使える。Run codeボタンあり。
ttp://pastebin.com/     まずまずシンプル。
ttp://dpaste.com/      とてもシンプル。消えるまでの日数は十分長ーく指定のこと。

◇Python公式サイト◇ http://www.python.org/
◇まとめwiki◇ ttp://python.rdy.jp/wiki.cgi

〇前スレ〇 くだすれPython(超初心者用) その51【まず1嫁】
https://mevius.5ch.net/test/read.cgi/tech/1602896738/

次スレは >>985 あたりが挑戦してくだしあ。(980過ぎて自動落ちは、無くなって久しい)
### END OF TEMPLATE ###
0900デフォルトの名無しさん
垢版 |
2021/03/10(水) 16:23:30.00ID:lzgXzAQZ
>>897
foo = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
bar = OrderedDict(foo)
bar.move_to_end('key3', False)
dict(bar)

面倒くさいな
順序が重要ならdict以外のデータ型を使ったほうがいい気がする
0902デフォルトの名無しさん
垢版 |
2021/03/10(水) 18:12:14.02ID:AEQd0qwX
>>898
これでも回して一生PCの前で待っていなさい

import itertools
for w,x,y,z,v in itertools.product(range(1,10**100),repeat=5):
__if w**5+x**5+y**5+z**5==v**5:
____print(w,x,y,z,v)
____exit()
0903デフォルトの名無しさん
垢版 |
2021/03/10(水) 23:15:16.74ID:PBvGnBXn
>>892
0904デフォルトの名無しさん
垢版 |
2021/03/10(水) 23:41:14.94ID:PBvGnBXn
>>897
>>> a = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
>>> b = {'key3': 'val3', 'key1': 'val1', 'key2': 'val2'}
>>> b == {k: v for k, v in (a.popitem(), *a.items())}
True
0905904
垢版 |
2021/03/11(木) 04:51:26.59ID:yhTUIDNA
これたぶん、順番かんけいなくa==bはTrueになるわ
気になって目が覚めたけど布団からでられんくて試せん
0906デフォルトの名無しさん
垢版 |
2021/03/11(木) 08:15:22.35ID:DSKl5Aml
3.7以降は挿入順が保証されてるんだけど、equal判定には影響しないと。
まあ当たり前だわな。
0907デフォルトの名無しさん
垢版 |
2021/03/11(木) 12:00:04.88ID:PA9WWZGA
>>902
できた
27 84 110 133 144
27 84 133 110 144
27 110 84 133 144
27 110 133 84 144
27 133 84 110 144
27 133 110 84 144
thx
exit()してるのにw固定の分だけ6個出力されるのはなぜ?
0908デフォルトの名無しさん
垢版 |
2021/03/11(木) 19:42:04.74ID:uFIDt3HD
>>904
恥を忍んで聞きたいのだけど、
b == {k: v for k, v in (a.popitem(), *a.items())}
この一行を内包表記を使わないで書いてください
0909デフォルトの名無しさん
垢版 |
2021/03/11(木) 20:29:28.00ID:dIdzHpoo
>>908
右辺は空のディクショナリにfor文で要素を追加していくだけやで
でも式で表現できないから左辺との比較演算したいなら関数化する
0910デフォルトの名無しさん
垢版 |
2021/03/11(木) 20:38:25.36ID:yhTUIDNA
>>908
比較演算は無視してください

c = dict()
for k, v in (a.popitem(), *a.items()):
____c[k] = v
0911デフォルトの名無しさん
垢版 |
2021/03/11(木) 20:51:30.67ID:/anLXWSZ
pysideのデザイナでフォームを作っていますが、実行すると全然デザイン通りの表示になりません
コントロールが全部サイズが小さくてつぶれてしまいます
なにが原因なのでしょうか?
0913デフォルトの名無しさん
垢版 |
2021/03/11(木) 21:01:03.02ID:yhTUIDNA
順序比較
result = map(lambda x, y: x == y, c, b)
print(all(result))
# True
0914デフォルトの名無しさん
垢版 |
2021/03/12(金) 16:52:36.03ID:vwXIO5A5
すみません。
全く単純なことだと思いますが、教えて下さい。

dataflameの任意の列のデータからvalue_countsを取得しました。

kosuu = df.iloc[:,i].value_counts()
print(kosuu)

とすると
30000 4
34000 1
とkosuuに取得されています。

この後に4とか1を条件にしたいのですが、個別の取得方法が
わかりません。的外れかも知れませんが、30000と34000は

print(kosuu.index[0])
print(kosuu.index[1])

で取得できました。
print(kosuu.index[0,0])
print(kosuu[0,0])
ではダメでした。どうすれば4を取得できますか。

初歩の初歩だと思いますが、これで4時間悩んでいます。。。
0918デフォルトの名無しさん
垢版 |
2021/03/12(金) 17:54:04.00ID:vwXIO5A5
>>915 様 916 様 ありがとうございます。

なるほど、要素をネストすれば行けるんですね。

kosuu.index[0] が30000なので

print(kosuu[kosuu.index[0]])
とすると、4が無事取得できました!

うれしいですが、こんな感じでやるしかないんでしょうか。
ちょっと不格好というか、わかりにくいというか。。。

でも、取得できればOKなので、ありがとうございました!
5時間ぶりに前に進めます。(汗)
0919デフォルトの名無しさん
垢版 |
2021/03/12(金) 21:39:39.45ID:U+iRPjP4
>>918
えーと、何番目の要素なのかを指定したいならkosuu.iloc[0]とかkosuu.iat[0]で

>この後に4とか1を条件にしたいのですが
4とか1とかを条件にして何をしたいの?
個別に値を取得しなくてもSeriesやDataFrame全体に関数を適用すればいいケースだったりしない?
0920デフォルトの名無しさん
垢版 |
2021/03/13(土) 02:36:31.64ID:dVxhbFOW
>>914
さくっとサンプル作ったけど、そんなややこしい事しなくてもでも良いぞ
https://ideone.com/HPzh9Q

とりあえずデータフレームでの条件抽出の方法と
at、iat、loc、ilocの使い方を調べた方が良い
0922デフォルトの名無しさん
垢版 |
2021/03/13(土) 16:49:49.59ID:VVi6+nr1
day name
23 orange
25 apple

のようなdfがあったときname列の0行目を取り出すにはどうすればいいのでしょう?
(列は名称、行は番号で取り出ししたいのです)

fruit = df.loc[0,'name']
だとエラーが出ます
0925デフォルトの名無しさん
垢版 |
2021/03/13(土) 18:10:21.60ID:VVi6+nr1
df.loc[0,'fruit']



df=df['fruit']
df.iloc[0]

って等価ですよね?
上だとエラーが出たり出なかったりして
下だとエラー出ません

なんでなんだろう・・・?
0927デフォルトの名無しさん
垢版 |
2021/03/13(土) 21:02:13.75ID:vHT18lcc
「でもなぜかエラーが出ます」

エラーが出てるのに、なぜかエラーの原因を調べようとしないんです

なんでなんだろう・・・?
0928デフォルトの名無しさん
垢版 |
2021/03/13(土) 21:20:14.43ID:4CH/cwMq
そりゃ自分の貴重な時間よりヒマそうな人物の無駄だろう時間を活用する方が大事だろ?
これは代弁だよ代弁
0929デフォルトの名無しさん
垢版 |
2021/03/13(土) 21:29:00.56ID:4CH/cwMq
エラーの原因を自力で調べられない、もしくは調べても分からないなら
エラーを再現できる最小限のコードを提出した上で原因を質問しろ
0932デフォルトの名無しさん
垢版 |
2021/03/13(土) 21:46:03.14ID:Gs819GmX
♪なんてったってID
私のID (Your ID)
IDがかぶったね〜
(さぁ みなさんご一緒にー)
yeah! yeah! yeah!
0933デフォルトの名無しさん
垢版 |
2021/03/13(土) 21:58:35.47ID:w/+LKebv
「ID被るなんてあり得ない!自作自演だ!」って言い張る奴いるよね。
IPv4足りなくて使い回してるのに。
0936デフォルトの名無しさん
垢版 |
2021/03/13(土) 22:48:23.65ID:qg8nW91/
IDが被ることなんてよくあるけど>>928の次のレスでいきなり被るなんてまず無いだろ

機内モードを押し忘れた対立煽りの馬鹿って線が濃厚だねぇ〜w
0937デフォルトの名無しさん
垢版 |
2021/03/13(土) 22:49:52.53ID:qg8nW91/
>>933は機内モード押した後に悔しくて書いちゃったかな?w

ID:4CH/cwMqが出てこなけりゃ俺の推理が当たってることになっちゃうねぇ〜w
0939デフォルトの名無しさん
垢版 |
2021/03/14(日) 17:45:37.15ID:GC71EGyC
0と1で構成された、2xNの配列で0と1の境目の位置を求めたいのですが、
for文でN列までループさせ、N-1とNを比較、0と1の境目になっていたら、
2行目も境目になっているかを同様に確認して境目を確定させるしかないでしょうか

0010111111
0000111111
     ↑3列目ではなく、5列目の位置を知りたい
0940デフォルトの名無しさん
垢版 |
2021/03/14(日) 17:52:30.82ID:eeLePgm1
うーん、何がしたいのかよく分からん。
物凄く簡単なことを複雑に表現している気もしないでもない。
0941デフォルトの名無しさん
垢版 |
2021/03/14(日) 18:07:15.51ID:UOoBKmpX
>>939
文字列なのか、正数の2進数表記のことなのか、何を言いたいのかわからん。
ビットのアンドを取ればいいとかいう話ではない?
0942デフォルトの名無しさん
垢版 |
2021/03/14(日) 18:07:42.69ID:NVyYwYtr
>>939
0010111111
0000011111
↑これだと該当なし?

0110110111
0000011111
↑これも該当なし?

0110111111
1100011111
↑これも該当なし?

0010111111
0100011111
↑これだと3列目?
0943デフォルトの名無しさん
垢版 |
2021/03/14(日) 18:36:11.15ID:eeLePgm1
>>939

文章をそのままコードに落とすとこんな感じになると思うけど…

N = 10
arr = [[0,0,1,0,1,1,1,1,1,1],[0,0,0,0,1,1,1,1,1,1]]

x = -1 # 見つからなかった場合
for i in range(N-1):
  if arr[0][i] != arr[0][i+1]:
    if arr[1][i] != arr[1][i+1]:
      x = i+2
      break

print(x)
0944デフォルトの名無しさん
垢版 |
2021/03/14(日) 19:05:19.92ID:8bm6cw7M
>>941
ゼロとイチの境界なら1bitシフトしてXORすればいいけど
2行分をどう扱いたいのか分からない。
0945デフォルトの名無しさん
垢版 |
2021/03/14(日) 19:24:51.81ID:0UiyZ0sn
hoge = [[a,100],[b,50],[a,200],[a,50],[b,3]]
みたいな感じの二次元のリストの各要素の一番目の要素で昇順にソートして
さらに一番目の要素が同じどうしは二番目の要素を見て降順に並べたいのですが
うまくできる方法をお教え願います

hoge = sorted(hoge, key=lambda x: (x[0],x[1]),reverse=True)

のように書いたり試してみましたが両方とも降順になってしまいます。
0947デフォルトの名無しさん
垢版 |
2021/03/14(日) 20:08:58.23ID:GC71EGyC
>>940,941,942さん
すみませんわかりづらく・・・

943さんのコードがまだ読み溶けていないのですが、
おそらくそれになっているかとおもっていて、01の並びは配列の意味で書いていました。
1行目と2行目の値が同じ列で初めて1になる列位置が知りたい意味でした。
[[0,0,1,0,1,1,1,1,1,1]、
[0,0,0,0,1,1,1,1,1,1]]
0948デフォルトの名無しさん
垢版 |
2021/03/14(日) 20:17:47.87ID:7GI/Bfny
p=[0,0,1,0,1,1,1,1,1,1]
q=[0,0,0,0,1,1,1,1,1,1]
for i, (x,y) in enumerate(zip(p,q)):
__if x==y==1:
____print(i)
____break

内包表記でpとqの和を取ってindexで検索したほうが速い気がする
0950デフォルトの名無しさん
垢版 |
2021/03/14(日) 20:27:54.91ID:Y6CmRV5p
こんなモンが欲しいのかと思った
https://ideone.com/q2rCBm
0951デフォルトの名無しさん
垢版 |
2021/03/14(日) 21:00:32.45ID:NVyYwYtr
>>947
0から1に切り替わってる箇所は対象だけど
1から0に切り替わってる箇所は対象外ってことなのか

def foo(arr):
__for i, pair in enumerate(zip(arr[0], arr[0][1:])):
____if pair == (0, 1) and (arr[1][i], arr[1][i+1]) == (0, 1):
______return i+2

4つの値を確認しないといけくてビット演算で簡略化できそうにないので
O(n)でやる以外にはないんじゃないかな
0952デフォルトの名無しさん
垢版 |
2021/03/15(月) 03:21:26.79ID:p7hcxdJK
プログラム組んでいるんだけどさあ
一週間で出来ないとモチベが下がってそのまま放置になること多いんだよな、、

自分が楽をするためが動機だから、もういいわ!ってなる
0957デフォルトの名無しさん
垢版 |
2021/03/15(月) 11:11:24.43ID:FrmPLjBr
雑に書いた手続き型のプログラムをオブジェクト指向で書き直して自己満足することはよくあるけど
ぶっちゃけ個人開発なら手続き型で十分だよな
0959デフォルトの名無しさん
垢版 |
2021/03/15(月) 12:06:27.25ID:JMxBUfb9
手続き型(Imperative)の反対は宣言型(declarative)だぞ。
手続き型かどうかはオブジェクト指向かどうかとまるで関係がない(直交する)
CもC++もC#もJavaもJavaScriptもPythonもPHPもGoもRustもみんな手続き型。
Prolog属などが宣言型。
Prologはパフォーマンス上カットなどの仕組みがあって純粋な宣言型ではないが。
数理証明系のドマイナー言語には純粋な宣言型のものもあるとか。
メジャー言語はほぼ100%手続き型。
HTMLやCSSはプログラミング言語ではないので除く。
たまにメジャー言語で宣言的に書けるのがどうのこうのという話が出てくるが宣言「的に」って言ってる時点で気づこうな。
0960デフォルトの名無しさん
垢版 |
2021/03/15(月) 12:27:55.07ID:OEM1rmYt
手続き型プログラムってProcedural programming(procedure:手続き)だと思ってたけど。
厳密には手続き型とオブジェクト指向は対義ではないけど、
「関数を呼び出す」っていう手続き型の根本的な構造の限界に対して
オブジェクト指向がもてはやされてきた歴史があるから、あながち間違いではないと思う
0963デフォルトの名無しさん
垢版 |
2021/03/15(月) 14:14:35.81ID:DXCJp1HT
正確にはimperativeは命令型。
その反対が宣言型(declarative)。
手続き型(procedural)は命令型(Imperative)の派生概念。
手続き型であれば必ず命令型である、という関係。
よく同義語として用いられがちだが、ブロックもスコープも備えていない言語は命令型言語であると言えても手続き型言語であるとはふつう言わない。
ところがオブジェクト指向は手続き型言語の標準装備となってきている一方で宣言型言語にも取り入れることは可能なので、やはり直交概念ではないかと思う。
0964デフォルトの名無しさん
垢版 |
2021/03/15(月) 14:38:22.84ID:W4mhVG7e
1つのプログラミング言語が両方の要素を持ってることはよくあることだけど
手続き型プログラミングとオブジェクト指向プログラミングは直交した概念ではないよ
0966デフォルトの名無しさん
垢版 |
2021/03/15(月) 15:52:07.88ID:JMxBUfb9
クラス定義時はメソッドの中身は手続き書いてるし、
メソッドコール時はイチ手続きとして記述してるじゃん。
つまり手続き型にオブジェクト指向加えることも可能だし、加えないことも可能というだけで、オブジェクト指向だから手続き型じゃないというのは完全に間違っている。
これはCもC++もC#もJavaもJavaScriptもPythonもPHPもGoもRustもCommon LISPもObject PascalもSwiftもKotlinも同じ。
詭弁を弄してる暇があったら勉強するべき。
0967デフォルトの名無しさん
垢版 |
2021/03/15(月) 16:02:22.13ID:JMxBUfb9
オブジェクト指向だから手続き型じゃないというのは、
Qちゃんはピッチ走法だから走ってない
真央ちゃんはフィギュアしてるからスケーティングしてない
こう言ってるのと同じです。
修辞的にはありかとも思いますがね。
0969デフォルトの名無しさん
垢版 |
2021/03/15(月) 16:08:14.29ID:W4mhVG7e
>>966
プログラムの中になんらかの手続きが書いてあれば
それらはすべて「手続き型プログラミング」と呼べるという定義ならそうかもね

一般的な定義とは違うけどそういう考え方があっても別にいいと思うよ
0971デフォルトの名無しさん
垢版 |
2021/03/15(月) 19:42:13.68ID:EoZWZldm
>>969
一般的でない定義を考えるのは自由だが、他人との議論で使うなら事前にそう定義すると断って話を進めないと他の人は混乱するだけだろう
0972デフォルトの名無しさん
垢版 |
2021/03/15(月) 20:48:13.18ID:qjY4XCPb
>>971
本人が一般的な定義だと思ってるんだからどうしようもないだろ
やんわり指摘したレス見て自省すればよかったのにな
0973デフォルトの名無しさん
垢版 |
2021/03/15(月) 23:44:25.76ID:Po+lVn5y
関数型∩オブジェクト指向 とか、
宣言型∩オブジェクト指向 とか、
具体的な言語実装の例はあるのかな?
オブジェクト指向でよく言われるオブジェクト指向たりうる要素が直感的には
割と手続き型に依存してるような気がするが、あまり深く考えたことないのでよくわからん
0974デフォルトの名無しさん
垢版 |
2021/03/15(月) 23:49:07.06ID:Po+lVn5y
>>968
C言語でオブジェクト指向というのは普通にあるでしょ。gtkとか最たるものじゃん。
糖衣構文はマクロぐらいしかないかもしれないけど。
0975デフォルトの名無しさん
垢版 |
2021/03/15(月) 23:57:52.44ID:M0xOqYlK
>>973
関数型は参照透過性がメリットなのに
クロージャーとかやるとオブジェクト指向と同じじゃん。
0977デフォルトの名無しさん
垢版 |
2021/03/16(火) 00:12:31.36ID:NvntMOXY
>>973
手続きが含まれたら手続き型らしいから
関数が含まれてたら関数型
オブジェクトが含まれてたらオブジェクト指向なんじゃねーの
知らんけど
0979デフォルトの名無しさん
垢版 |
2021/03/16(火) 00:56:17.98ID:6YThIMgd
じゃあオブジェクト指向と関数ベタ書き比較する時はなんて言えばいいんだ?
0980デフォルトの名無しさん
垢版 |
2021/03/16(火) 01:36:57.64ID:giEPecL9
>>979
ADTのことを言ってるなら名前の通り"抽象型を使って書く"とでも言えば?

抽象型を使ってればオブジェクト指向?
0981デフォルトの名無しさん
垢版 |
2021/03/16(火) 02:01:29.83ID:WgCwoiox
定義で揉めやすいのは名前が悪いから
それぞれ手続き中心指向、オブジェクト中心指向、関数中心指向に脳内変換しとけばどうでもよくなる

それぞれ直交した概念でもなければ排他的な分類でもない
0982デフォルトの名無しさん
垢版 |
2021/03/16(火) 03:45:18.19ID:6arf77iJ
言語の方が複合的なパラダイムに対応していても覚える頭が1ビットしかないから其れだと困るねん
0983デフォルトの名無しさん
垢版 |
2021/03/16(火) 04:14:50.86ID:K4E4Nbs9
宣言型∩オブジェクト指向は実験的prolog拡張実装がいくつかあった気がする。
関数型はオブジェクト指向と相性悪いつか関数型勢からは唾棄すべき害悪として忌み嫌われてる印象。
世の中でオブジェクト指向といったら実質99%は手続き型∩オブジェクト指向だと思う。
C++以前から、smalltalkからこのタイプだもん。
0987デフォルトの名無しさん
垢版 |
2021/03/16(火) 10:37:00.38ID:xULngIlE
>>981
確かに「〜型」という言葉で1ビット二元思考になるやつが多いのかも
「〜的」とでも訳しておけばよかったのに
0988デフォルトの名無しさん
垢版 |
2021/03/16(火) 11:20:57.40ID:XtVeGAkv
a = hoge()
a.hogeset(1)

こんな感じてコンストラクタと別メソッドで初期設定しなきゃいけないクソめんどい部品があるんたけど1行でやる方法ない?

a = hoge().hogeset(1)

イメージはこんな感じで書いてメソッド呼び出しつつ変数aにはオブジェクトhoge本体を収めたい(hogesetは何も返さない)
0990デフォルトの名無しさん
垢版 |
2021/03/16(火) 12:25:58.91ID:ja5zi908
オブジェクトhoge本体
0991デフォルトの名無しさん
垢版 |
2021/03/16(火) 12:46:56.08ID:Zc215ysF
GUI部品でsetVisible(True)とかなら略しない方がいい
0994デフォルトの名無しさん
垢版 |
2021/03/16(火) 15:32:45.88ID:XtVeGAkv
>>991
わォエスパーかよちょっと違うけど
tkinterのボタン配置別メソでするのダルいんじゃあ〜

>>992
やっぱムリかぁ
でも2行で書くの負けな気がするから関数カマスことにしました (結局5行になってるのは知らない、たくさん置くし・・・。)
def my_hoge_create(param):
a = hoge()
a.hogeset(param)
return a

a = my_hoge_create(1)

>>993
めっちゃ興味あるけど3.5だからまた今度にするわ (進歩しないゴミ)
0995デフォルトの名無しさん
垢版 |
2021/03/16(火) 15:40:26.02ID:ZzxG4K64
>>993
えーこういうこと?
(a := hoge()).hogeset(1)

条件式とかの中ならありだと思うが2行でも書けるところに使うのは気持ち悪いな
0997デフォルトの名無しさん
垢版 |
2021/03/16(火) 17:09:12.14ID:CHhu1vGO
gzipか普通のテキストファイルかを名前で判別して読み込みたいんで下記のように書いてるんですが、read_fileがif/elseで2回出てくるのが冗長っぽいのでif/elseの後にread_file()をしようと思うとI/O operation closedとエラーが出ます。
with open後にインデント変えたので閉じられたたのかなと思うのですが、
gzipかそうじゃないかのファイルオブジェクトとやらをif文で決めた後に、1回の関数で処理するようなスマートな書き方出来ないものでしょうか?

現状
def read_file(f):
data = f.read()


name = 'hoge.txt.gz'
if '.gz' in name:
with open(name, mode='rt') as f:
read_file(f)
else:
with open(name) as f:
read_file(f)
レス数が1000を超えています。これ以上書き込みはできません。

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