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

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

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

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

Q&A

解決済

3回答

511閲覧

Python 2次配列(タプル含む)のソート方法について

lemonesour

総合スコア25

Python

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

0グッド

0クリップ

投稿2021/12/20 06:06

■やりたいこと
リストとタプルが混在するリストにおいて
はじめに第一要素がで昇順し、第一要素が最も大きい第二要素(タプル)を降順させたい

■試したこと

Python

1test_list = [[11, (0, 11)], [7, (16, 23)], [11, (53, 64)]] 2 3sorted_list = sorted(test_list) #第一要素を基準とした昇順 4print(sorted_list) 5#[[7, (16, 23)], [11, (0, 11)], [11, (53, 64)]] 6 7sorted_list.sort(key=lamdba x: x[1], reverse=Ture) #第二要素を基準とした降順 8 9print(sorted_list) 10#[[11, (53, 64)], [7, (16, 23)], [11, (0, 11)]] 11# 全てが第二要素(タプル)の降順となってしまう 12 13

■期待する結果
上記、test_listの場合、第一要素のみで昇順(7,11,11)にし、その後、第一要素が最も大きい「11」のタプルだけを降順((53, 64),(0, 11))にしたい。
[[7, (16, 23)], [11, (53, 64)], [11, (0, 11)]]

ご教授の程、よろしくお願いいたします。

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

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

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

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

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

quickquip

2021/12/20 08:17

スペルミスと全角空白が気になりました。動くソースに修正してください。
guest

回答3

0

ソートする前に、第一要素の最大値を得ておきます。

python3

1max_key = max(map(lambda e: e[0], test_list)) # => 11

これを使ったkeyを指定してsortedします。

python3

1sorted_list = sorted( 2 test_list, 3 key=lambda e: [e[0], (-e[1][0], -e[1][1])] if e[0] == max_key else e 4)

投稿2021/12/20 09:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

はじめに第一要素がで昇順し、第一要素が最も大きい第二要素(タプル)を降順させたい

欲しいものに対して手順は逆にしないといけないです。
まず第二要素(タプル)を降順でソートしてから、第一要素で昇順ソートです。

python

1test_list = [[11, (0, 11)], [7, (16, 23)], [11, (53, 64)]] 2 3sorted_list = sorted(test_list, key=lambda x: x[1], reverse=True) #第二要素を基準とした降順 4print(sorted_list) 5# [[11, (53, 64)], [7, (16, 23)], [11, (0, 11)]] 6 7sorted_list.sort(key=lambda x: x[0]) #第一要素を基準とした昇順 8print(sorted_list) 9# [[7, (16, 23)], [11, (53, 64)], [11, (0, 11)]]

投稿2021/12/20 08:15

quickquip

総合スコア11038

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

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

lemonesour

2021/12/20 09:34

quickquip様 コメントありがとうございます。 サンプルコードについて、失礼しました。動作するコードを提示するよう気を付けます。 ご提案いただいた方法を採用させていただきます! 今後ともよろしくお願いいたします
guest

0

  • 第一要素が最も大きい第二要素(タプル)を降順させたい

上記の条件で、「第一要素が最も大きい」以外はどうなっても良いというのであれば以下です。

python

1>>> sorted(test_list, key=lambda x:(-x[0], x[1]), reverse=True) 2[[7, (16, 23)], [11, (53, 64)], [11, (0, 11)]]

投稿2021/12/20 06:17

ppaul

総合スコア24666

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

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

lemonesour

2021/12/20 09:33

ppaul様 毎回ありがとうございます。 参考にさせて頂きます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問