くだすれPython(超初心者用) その52【まず1嫁】
レス数が1000を超えています。これ以上書き込みはできません。
当スレに★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 ### >>897
foo = {'key1': 'val1', 'key2': 'val2', 'key3': 'val3'}
bar = OrderedDict(foo)
bar.move_to_end('key3', False)
dict(bar)
面倒くさいな
順序が重要ならdict以外のデータ型を使ったほうがいい気がする >>900
見た目を整えるのが目的でした
即レス感謝 >>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() >>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 これたぶん、順番かんけいなくa==bはTrueになるわ
気になって目が覚めたけど布団からでられんくて試せん 3.7以降は挿入順が保証されてるんだけど、equal判定には影響しないと。
まあ当たり前だわな。 >>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個出力されるのはなぜ? >>904
恥を忍んで聞きたいのだけど、
b == {k: v for k, v in (a.popitem(), *a.items())}
この一行を内包表記を使わないで書いてください >>908
右辺は空のディクショナリにfor文で要素を追加していくだけやで
でも式で表現できないから左辺との比較演算したいなら関数化する >>908
比較演算は無視してください
c = dict()
for k, v in (a.popitem(), *a.items()):
____c[k] = v pysideのデザイナでフォームを作っていますが、実行すると全然デザイン通りの表示になりません
コントロールが全部サイズが小さくてつぶれてしまいます
なにが原因なのでしょうか? >>909
>>910
おお、ありがとうございます! 順序比較
result = map(lambda x, y: x == y, c, b)
print(all(result))
# True すみません。
全く単純なことだと思いますが、教えて下さい。
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時間悩んでいます。。。 >>914
ttps://note.nkmk.me/python-pandas-value-counts/
>ユニークな要素の頻度(出現回数)
あたり? >>915 様 916 様 ありがとうございます。
なるほど、要素をネストすれば行けるんですね。
kosuu.index[0] が30000なので
print(kosuu[kosuu.index[0]])
とすると、4が無事取得できました!
うれしいですが、こんな感じでやるしかないんでしょうか。
ちょっと不格好というか、わかりにくいというか。。。
でも、取得できればOKなので、ありがとうございました!
5時間ぶりに前に進めます。(汗) >>918
えーと、何番目の要素なのかを指定したいならkosuu.iloc[0]とかkosuu.iat[0]で
>この後に4とか1を条件にしたいのですが
4とか1とかを条件にして何をしたいの?
個別に値を取得しなくてもSeriesやDataFrame全体に関数を適用すればいいケースだったりしない? >>914
さくっとサンプル作ったけど、そんなややこしい事しなくてもでも良いぞ
https://ideone.com/HPzh9Q
とりあえずデータフレームでの条件抽出の方法と
at、iat、loc、ilocの使い方を調べた方が良い >>920
がんがってるところあれなんだが
>>919への応答いかんによっては
役に立たない可能性がががが day name
23 orange
25 apple
のようなdfがあったときname列の0行目を取り出すにはどうすればいいのでしょう?
(列は名称、行は番号で取り出ししたいのです)
fruit = df.loc[0,'name']
だとエラーが出ます >>923
ありがとうございます
でもなぜかエラーが出ます df.loc[0,'fruit']
と
df=df['fruit']
df.iloc[0]
って等価ですよね?
上だとエラーが出たり出なかったりして
下だとエラー出ません
なんでなんだろう・・・? >>925
上と下は違う
違うものだから
結果も違う 「でもなぜかエラーが出ます」
エラーが出てるのに、なぜかエラーの原因を調べようとしないんです
なんでなんだろう・・・? そりゃ自分の貴重な時間よりヒマそうな人物の無駄だろう時間を活用する方が大事だろ?
これは代弁だよ代弁 エラーの原因を自力で調べられない、もしくは調べても分からないなら
エラーを再現できる最小限のコードを提出した上で原因を質問しろ ♪なんてったってID
私のID (Your ID)
IDがかぶったね〜
(さぁ みなさんご一緒にー)
yeah! yeah! yeah! 「ID被るなんてあり得ない!自作自演だ!」って言い張る奴いるよね。
IPv4足りなくて使い回してるのに。 そんな必死にならんでもいいんじゃ>>928-933 クソやろうの代わりにデバッグするとか世の中で一番腹立つ作業じゃん IDが被ることなんてよくあるけど>>928の次のレスでいきなり被るなんてまず無いだろ
機内モードを押し忘れた対立煽りの馬鹿って線が濃厚だねぇ〜w >>933は機内モード押した後に悔しくて書いちゃったかな?w
ID:4CH/cwMqが出てこなけりゃ俺の推理が当たってることになっちゃうねぇ〜w >>931
枝状分岐宇端末点の自分だよ。
僕と契約して、ジアースのパイロットになってよ 0と1で構成された、2xNの配列で0と1の境目の位置を求めたいのですが、
for文でN列までループさせ、N-1とNを比較、0と1の境目になっていたら、
2行目も境目になっているかを同様に確認して境目を確定させるしかないでしょうか
0010111111
0000111111
↑3列目ではなく、5列目の位置を知りたい うーん、何がしたいのかよく分からん。
物凄く簡単なことを複雑に表現している気もしないでもない。 >>939
文字列なのか、正数の2進数表記のことなのか、何を言いたいのかわからん。
ビットのアンドを取ればいいとかいう話ではない? >>939
0010111111
0000011111
↑これだと該当なし?
0110110111
0000011111
↑これも該当なし?
0110111111
1100011111
↑これも該当なし?
0010111111
0100011111
↑これだと3列目? >>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) >>941
ゼロとイチの境界なら1bitシフトしてXORすればいいけど
2行分をどう扱いたいのか分からない。 hoge = [[a,100],[b,50],[a,200],[a,50],[b,3]]
みたいな感じの二次元のリストの各要素の一番目の要素で昇順にソートして
さらに一番目の要素が同じどうしは二番目の要素を見て降順に並べたいのですが
うまくできる方法をお教え願います
hoge = sorted(hoge, key=lambda x: (x[0],x[1]),reverse=True)
のように書いたり試してみましたが両方とも降順になってしまいます。 hoge = sorted(hoge, key=lambda x: (x[0], -x[1]))
じゃ、ダメ? >>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]] 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で検索したほうが速い気がする >>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)でやる以外にはないんじゃないかな プログラム組んでいるんだけどさあ
一週間で出来ないとモチベが下がってそのまま放置になること多いんだよな、、
自分が楽をするためが動機だから、もういいわ!ってなる 設計が終わったら脳内では不具合無く動いてるから満足してしまうよな 自分の過去作のゴミ設計の無駄を探して再設計するの好き 雑に書いた手続き型のプログラムをオブジェクト指向で書き直して自己満足することはよくあるけど
ぶっちゃけ個人開発なら手続き型で十分だよな 手続き型(Imperative)の反対は宣言型(declarative)だぞ。
手続き型かどうかはオブジェクト指向かどうかとまるで関係がない(直交する)
CもC++もC#もJavaもJavaScriptもPythonもPHPもGoもRustもみんな手続き型。
Prolog属などが宣言型。
Prologはパフォーマンス上カットなどの仕組みがあって純粋な宣言型ではないが。
数理証明系のドマイナー言語には純粋な宣言型のものもあるとか。
メジャー言語はほぼ100%手続き型。
HTMLやCSSはプログラミング言語ではないので除く。
たまにメジャー言語で宣言的に書けるのがどうのこうのという話が出てくるが宣言「的に」って言ってる時点で気づこうな。 手続き型プログラムってProcedural programming(procedure:手続き)だと思ってたけど。
厳密には手続き型とオブジェクト指向は対義ではないけど、
「関数を呼び出す」っていう手続き型の根本的な構造の限界に対して
オブジェクト指向がもてはやされてきた歴史があるから、あながち間違いではないと思う 正確にはimperativeは命令型。
その反対が宣言型(declarative)。
手続き型(procedural)は命令型(Imperative)の派生概念。
手続き型であれば必ず命令型である、という関係。
よく同義語として用いられがちだが、ブロックもスコープも備えていない言語は命令型言語であると言えても手続き型言語であるとはふつう言わない。
ところがオブジェクト指向は手続き型言語の標準装備となってきている一方で宣言型言語にも取り入れることは可能なので、やはり直交概念ではないかと思う。 1つのプログラミング言語が両方の要素を持ってることはよくあることだけど
手続き型プログラミングとオブジェクト指向プログラミングは直交した概念ではないよ クラス定義時はメソッドの中身は手続き書いてるし、
メソッドコール時はイチ手続きとして記述してるじゃん。
つまり手続き型にオブジェクト指向加えることも可能だし、加えないことも可能というだけで、オブジェクト指向だから手続き型じゃないというのは完全に間違っている。
これはCもC++もC#もJavaもJavaScriptもPythonもPHPもGoもRustもCommon LISPもObject PascalもSwiftもKotlinも同じ。
詭弁を弄してる暇があったら勉強するべき。 オブジェクト指向だから手続き型じゃないというのは、
Qちゃんはピッチ走法だから走ってない
真央ちゃんはフィギュアしてるからスケーティングしてない
こう言ってるのと同じです。
修辞的にはありかとも思いますがね。 XVIEW なんてC言語だがオブジェクト指向を
名乗っているぞ >>966
プログラムの中になんらかの手続きが書いてあれば
それらはすべて「手続き型プログラミング」と呼べるという定義ならそうかもね
一般的な定義とは違うけどそういう考え方があっても別にいいと思うよ 定義じゃなくてパラダイムだから
分類に使うと失敗する >>969
一般的でない定義を考えるのは自由だが、他人との議論で使うなら事前にそう定義すると断って話を進めないと他の人は混乱するだけだろう >>971
本人が一般的な定義だと思ってるんだからどうしようもないだろ
やんわり指摘したレス見て自省すればよかったのにな 関数型∩オブジェクト指向 とか、
宣言型∩オブジェクト指向 とか、
具体的な言語実装の例はあるのかな?
オブジェクト指向でよく言われるオブジェクト指向たりうる要素が直感的には
割と手続き型に依存してるような気がするが、あまり深く考えたことないのでよくわからん >>968
C言語でオブジェクト指向というのは普通にあるでしょ。gtkとか最たるものじゃん。
糖衣構文はマクロぐらいしかないかもしれないけど。 >>973
関数型は参照透過性がメリットなのに
クロージャーとかやるとオブジェクト指向と同じじゃん。 >>973
手続きが含まれたら手続き型らしいから
関数が含まれてたら関数型
オブジェクトが含まれてたらオブジェクト指向なんじゃねーの
知らんけど CでADT使ってればすぐオブジェクト指向って言うやつも大差ない じゃあオブジェクト指向と関数ベタ書き比較する時はなんて言えばいいんだ? >>979
ADTのことを言ってるなら名前の通り"抽象型を使って書く"とでも言えば?
抽象型を使ってればオブジェクト指向? 定義で揉めやすいのは名前が悪いから
それぞれ手続き中心指向、オブジェクト中心指向、関数中心指向に脳内変換しとけばどうでもよくなる
それぞれ直交した概念でもなければ排他的な分類でもない 言語の方が複合的なパラダイムに対応していても覚える頭が1ビットしかないから其れだと困るねん 宣言型∩オブジェクト指向は実験的prolog拡張実装がいくつかあった気がする。
関数型はオブジェクト指向と相性悪いつか関数型勢からは唾棄すべき害悪として忌み嫌われてる印象。
世の中でオブジェクト指向といったら実質99%は手続き型∩オブジェクト指向だと思う。
C++以前から、smalltalkからこのタイプだもん。 >>981
確かに「〜型」という言葉で1ビット二元思考になるやつが多いのかも
「〜的」とでも訳しておけばよかったのに a = hoge()
a.hogeset(1)
こんな感じてコンストラクタと別メソッドで初期設定しなきゃいけないクソめんどい部品があるんたけど1行でやる方法ない?
a = hoge().hogeset(1)
イメージはこんな感じで書いてメソッド呼び出しつつ変数aにはオブジェクトhoge本体を収めたい(hogesetは何も返さない) >>988
そういうクラスを作ればいいだけじゃね? GUI部品でsetVisible(True)とかなら略しない方がいい >>988
特に何もせず1行で書くのは無理じゃないかな
selfをreturnするようなデコレータを作って
各種set系のメソッドを上書きするか別名で定義してやれば1行で書けるようにはなる
やる価値があるかどうかは状況次第
https://techiedelight.com/compiler/?G6Nb >>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だからまた今度にするわ (進歩しないゴミ) >>993
えーこういうこと?
(a := hoge()).hogeset(1)
条件式とかの中ならありだと思うが2行でも書けるところに使うのは気持ち悪いな 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) mode="rt" if ".gz" in name else "r" func = gzip.open if name.endswith(".gz") else open
with func(name, mode="rt") as f:
read_file(f) レス数が1000を超えています。これ以上書き込みはできません。