このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、お礼は Python の布教と初心者の救済をお願いします。
エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>985 辺りで
前スレ
くだすれPython(超初心者用) その35
http://mevius.5ch.net/test/read.cgi/tech/1496411341/
VIPQ2_EXTDAT: checked:default:1000:512:----: EXT was configured
探検
くだすれPython(超初心者用) その36
■ このスレッドは過去ログ倉庫に格納されています
2018/01/01(月) 20:18:42.82ID:iOcRvNll
50デフォルトの名無しさん
2018/01/13(土) 22:24:55.51ID:BAsP1Vyl 下記のような配列を作ってその中から条件を満たしているものの中で
価格が最大値のものを検索するということがしたいのです。
品目 条件 価格
りんご OK 100
みかん OK 200
れもん NG 300
1.この場合、配列は下記のようなリストを作ればよいのでしょうか?
list=[[りんご, OK, 100], [みかん, OK, 200], [れもん, NG, 300]]
2.上記1.のアプローチが正しいとして、上記リストにおいて、条件がOKのもので価格が一番高いものの
配列の番号(または品目)を取得する方法をどなたかお教えいただけないでしょうか。
(辞書でもリストでも何でも良いのでが上記の表のような配列の裁き方が検索しても見つけられず・・・)
価格が最大値のものを検索するということがしたいのです。
品目 条件 価格
りんご OK 100
みかん OK 200
れもん NG 300
1.この場合、配列は下記のようなリストを作ればよいのでしょうか?
list=[[りんご, OK, 100], [みかん, OK, 200], [れもん, NG, 300]]
2.上記1.のアプローチが正しいとして、上記リストにおいて、条件がOKのもので価格が一番高いものの
配列の番号(または品目)を取得する方法をどなたかお教えいただけないでしょうか。
(辞書でもリストでも何でも良いのでが上記の表のような配列の裁き方が検索しても見つけられず・・・)
2018/01/14(日) 00:20:35.69ID:t0jHIC/R
max関数を調べてみるとよい
2018/01/14(日) 01:00:13.30ID:rilCPocj
>>50
Pythonじゃなきゃダメ?
正直、データベースソフトでやるべき案件だと思う
どうしてもPythonでやるなら、内包表記を使ってリストから
条件に合う要素を抜き出して新しいリストを作り、データを絞り込んで行く
>>> a = [['りんご', 'OK', 100], ['みかん', 'OK', 200], ['れもん', 'NG', 300]]
>>> ok_list = [elem for elem in a if elem[1] == 'OK']
>>> ok_list
[['りんご', 'OK', 100], ['みかん', 'OK', 200]]
>>> max_price = max([elem[2] for elem in ok_list])
>>> max_price
200
>>> name = [elem[0] for elem in ok_list if elem[2] == max_price]
>>> name
['みかん']
あと、list=[[りんご, OK, 100], [みかん, OK, 200], [れもん, NG, 300]] と最初にあったが
変数名にlistなどのPythonに元からあるオブジェクト名そのまんまを使うのは避けよう
エラーの元になる
Pythonじゃなきゃダメ?
正直、データベースソフトでやるべき案件だと思う
どうしてもPythonでやるなら、内包表記を使ってリストから
条件に合う要素を抜き出して新しいリストを作り、データを絞り込んで行く
>>> a = [['りんご', 'OK', 100], ['みかん', 'OK', 200], ['れもん', 'NG', 300]]
>>> ok_list = [elem for elem in a if elem[1] == 'OK']
>>> ok_list
[['りんご', 'OK', 100], ['みかん', 'OK', 200]]
>>> max_price = max([elem[2] for elem in ok_list])
>>> max_price
200
>>> name = [elem[0] for elem in ok_list if elem[2] == max_price]
>>> name
['みかん']
あと、list=[[りんご, OK, 100], [みかん, OK, 200], [れもん, NG, 300]] と最初にあったが
変数名にlistなどのPythonに元からあるオブジェクト名そのまんまを使うのは避けよう
エラーの元になる
2018/01/14(日) 01:32:55.95ID:YcirJyIj
>>52
Pythonスレで Pythonじゃなきゃダメ? ってオイオイだろ
これなんか学校の課題って気がする
list=[["りんご", "OK", 100], ["みかん", "OK", 200], ["れもん", "NG", 300]]
l_OK = [item_OK for item_OK in filter(lambda list_item : list_item[1] == "OK", list)]
#l_OK = [item for item in list if item[1] == "OK"]
print( max(l_OK, key=(lambda item_OK: item_OK[2]) )[0] )
Pythonスレで Pythonじゃなきゃダメ? ってオイオイだろ
これなんか学校の課題って気がする
list=[["りんご", "OK", 100], ["みかん", "OK", 200], ["れもん", "NG", 300]]
l_OK = [item_OK for item_OK in filter(lambda list_item : list_item[1] == "OK", list)]
#l_OK = [item for item in list if item[1] == "OK"]
print( max(l_OK, key=(lambda item_OK: item_OK[2]) )[0] )
54デフォルトの名無しさん
2018/01/14(日) 02:18:12.29ID:yVTJx4nd pandas使え
5550です
2018/01/14(日) 08:27:28.43ID:krdFkWsl2018/01/14(日) 10:39:38.00ID:TwgO/caM
pandasのstr.containsとかって、真偽反転するとき“~”を付けるじゃないですか
この波線って、pythonの側のビット演算子ですか?
strアクセサ用のオプション記号?
x=1
tf=2 in x
print(~tf)
とかで試してみるとT/Fではなく数字が出てくるので、strアクセサ用の機能?
この波線って、pythonの側のビット演算子ですか?
strアクセサ用のオプション記号?
x=1
tf=2 in x
print(~tf)
とかで試してみるとT/Fではなく数字が出てくるので、strアクセサ用の機能?
2018/01/14(日) 13:23:26.45ID:0mtDcMfe
>56
in を使うなら、x=[1]とするべきでは?
また、否定演算子は~でなくてnotを使うべき。
~は、ビット毎の反転をとる演算子。Trueは1、Falseは0とみなして計算されるはず。
in を使うなら、x=[1]とするべきでは?
また、否定演算子は~でなくてnotを使うべき。
~は、ビット毎の反転をとる演算子。Trueは1、Falseは0とみなして計算されるはず。
58デフォルトの名無しさん
2018/01/14(日) 14:50:25.95ID:79VwseEt だれもそんな話はしてないぞ
2018/01/14(日) 15:32:15.53ID:DgdnagvN
>>50
もう解決してるみたいだけど
価格が0または正だと仮定していいなら
print(max(list, key=(lambda x: x[2] if x[1] == 'OK' else -1)))
とすれば要素の抽出とかはなくてもいける
ただし'OK'のものが一件もないと価格が'NG'のものを返すので注意が必要
もう解決してるみたいだけど
価格が0または正だと仮定していいなら
print(max(list, key=(lambda x: x[2] if x[1] == 'OK' else -1)))
とすれば要素の抽出とかはなくてもいける
ただし'OK'のものが一件もないと価格が'NG'のものを返すので注意が必要
6050
2018/01/14(日) 15:34:13.85ID:DgdnagvN > 価格が'NG'のものを返す
価格じゃなくて条件だったわ
価格じゃなくて条件だったわ
2018/01/14(日) 15:57:09.64ID:/4CphuTL
>>56
配列の番号(と品目)を取得するようにしたニダね
list=[["りんご", "OK", 100], ["みかん", "OK", 200], ["れもん", "NG", 300]]
dic_OK = {list_idx:list_item for list_idx,list_item in enumerate(list) if list_item[1] == 'OK'}
list_index = max( dic_OK, key=(lambda dkey: dic_OK[dkey][2]) )
print( 'List index:', list_index )
print( 'Item name:', list[list_index][0] )
配列の番号(と品目)を取得するようにしたニダね
list=[["りんご", "OK", 100], ["みかん", "OK", 200], ["れもん", "NG", 300]]
dic_OK = {list_idx:list_item for list_idx,list_item in enumerate(list) if list_item[1] == 'OK'}
list_index = max( dic_OK, key=(lambda dkey: dic_OK[dkey][2]) )
print( 'List index:', list_index )
print( 'Item name:', list[list_index][0] )
2018/01/14(日) 16:27:06.07ID:/4CphuTL
>>59
ついでに、max()使うとOKフラグ付きの同じ最高価格の物が複数あると困ったニダになるからな
ついでに、max()使うとOKフラグ付きの同じ最高価格の物が複数あると困ったニダになるからな
6350
2018/01/14(日) 16:31:48.67ID:DgdnagvN よくよく考えたらmax()のキーにタプルを返すようにすれば
> 価格が0または正だと仮定していいなら
の制限は要らなかったな
print(max(list, key=(lambda x: ( x[1] == 'OK', x[2]))))
> ただし'OK'のものが一件もないと条件が'NG'のものを返すので注意が必要
の方はそのままだけど
> 価格が0または正だと仮定していいなら
の制限は要らなかったな
print(max(list, key=(lambda x: ( x[1] == 'OK', x[2]))))
> ただし'OK'のものが一件もないと条件が'NG'のものを返すので注意が必要
の方はそのままだけど
2018/01/14(日) 16:33:19.71ID:DgdnagvN
>>62
そこは要件次第でしょ
そこは要件次第でしょ
65デフォルトの名無しさん
2018/01/14(日) 17:34:08.11ID:CiqP7kj2■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★2 [ぐれ★]
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★3 [ぐれ★]
- 【速報】高市総理が官邸入り [Hitzeschleier★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【震度6強】政府 危機管理センターに官邸対策室を設置 [ぐれ★]
- 高市内閣「支持」64%「不支持」19% NHK世論調査 ★2 [少考さん★]
- 地震 ★2
- 【悲報】高市早苗、議員定数1割削減の根拠を答えられず終了 [834922174]
- 【速報】高市早苗、起床 [779938112]
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 巨大地震 [957955821]
- セガサターンって、何のソフトを遊ぶゲーム機だったの? [289068665]
