質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

848閲覧

文字+数字のリストのソートのかけ方

kurobei0510

総合スコア11

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/05 08:53

15 ge 121.7 ge 125.0 le 162.4 le 153.5 ge 119.6 le 182.4 le 149.4 le 192.7 le 168.8 ge 110.0 le 180.9 ge 119.9 le 152.7 le 180.8 le 152.4 n = int(input()) # nは入力回数 str_list = [list(input().split()) for _ in range(n)] print(str_list) [['ge', '121.7'], ['ge', '125.0'], ['le', '162.4'], ['le', '153.5'], ['ge', '119.6'], ['le', '182.4'], ['le', '149.4'], ['le', '192.7'], ['le', '168.8'], ['ge', '110.0'], ['le', '180.9'], ['ge', '119.9'], ['le', '152.7'], ['le', '180.8'], ['le', '152.4']] #結果 125.0 149.4

geとleの境界線の値はどのように検出すればいいですか。
ソートをかけて、ge,leをifで確認して、ge→leに変わったところの前後を出力したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mather

2021/04/05 09:10

何かの勉強サイトの問題っぽいですね。丸投げはダメですよ。 > ソートをかけて、ge,leをifで確認して、ge→leに変わったところの前後を出力したいです。 すでに答えが出ているようですが、実装してつまずいたポイントはどこですか?
guest

回答1

0

ベストアンサー

ソートのルールがいまひとつ分かりませんが
geleの二つのリストを別々に用意したほうが簡単ではないでしょうか。
geの最大値、leの最小値を求めればよいでしょう。

Python

1lst = [['ge', '121.7'], ['ge', '125.0'], ['le', '162.4'], ['le', '153.5'], ['ge', '119.6'], ['le', '182.4'], ['le', '149.4'], ['le', '192.7'], ['le', '168.8'], ['ge', '110.0'], ['le', '180.9'], ['ge', '119.9'], ['le', '152.7'], ['le', '180.8'], ['le', '152.4']] 2 3ge_lst = [float(v[1]) for v in lst if v[0] == 'ge'] 4le_lst = [float(v[1]) for v in lst if v[0] == 'le'] 5 6print(max(ge_lst)) # 125.0 7print(min(le_lst)) # 149.4

あるいはもっと単純に以下のように2つの変数を用意しておけばソートの必要もないかと思います。

Python

1import sys 2 3lst = [['ge', '121.7'], ['ge', '125.0'], ['le', '162.4'], ['le', '153.5'], ['ge', '119.6'], ['le', '182.4'], ['le', '149.4'], ['le', '192.7'], ['le', '168.8'], ['ge', '110.0'], ['le', '180.9'], ['ge', '119.9'], ['le', '152.7'], ['le', '180.8'], ['le', '152.4']] 4 5ge = sys.float_info.min 6le = sys.float_info.max 7for v in lst: 8 if v[0] == 'ge': 9 ge = max(float(v[1]), ge) 10 else: 11 le = min(float(v[1]), le) 12 13print(ge) # 125.0 14print(le) # 149.4

投稿2021/04/05 09:07

編集2021/04/05 09:14
can110

総合スコア38278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kurobei0510

2021/04/05 09:15

n = int(input()) # nは入力回数 str_list = [list(input().split()) for _ in range(n)] #print(str_list) ge=[] le=[] for i in range(n): a=str_list[i][0] if a=="ge": ge.append(str_list[i][1]) elif a=="le": le.append(str_list[i][1]) print(max(ge),min(le)) でかいけつできました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問