nkj23
@nkj23 (Yuta Nakamura)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

タプルのリストから一つ目の要素を消去したい

解決したいこと

数値に応じて文字列の並び替えをしたいです。

該当するソースコード

a = 1
b = 3
c = 2
list = [('a',a),('b',b),('c',c)]

new_list = sorted(list, key=lambda x: x[1])
print(new_list)

とした時に、
[('a', 1), ('c', 2), ('b', 3)]

と出力されます。

実現したいこと

この後に、この結果をタプルのリストではなく、タプルの二つ目の要素(この場合1などの数値)を消去してタプルの一つ目の要素(この場合'a'などの文字列)のみにして、シンプルなリストを作成したいです。

理想は、
['a', 'c', 'b']

の出力を得たいです。

そもそも実現したいこと

タプルの形でしか文字列と数値を日もづけられないのかと思い、タプルを用いています。
そもそもは、学校のテストで、
A君:70点,B君90点,C君80点
となった場合に、点数の昇順で学生の名前だけのリスト、
['A君','C君','B君']
というリストを作成したいです。

なのでタプルを使用せずでも実現できるのであれば問題ありません。

よろしくお願いいたします。

0

2Answer

こちらの方法はいかがでしょうか?

a = 1
b = 3
c = 2

l = [('a',a),('b',b),('c',c)]
l.sort(key=lambda x: x[1])
new_l = [x[0] for x in l]

print(new_l)
['a', 'c', 'b']
1Like

Comments

  1. @nkj23

    Questioner

    迅速なご回答本当にありがとうございます!
    こちらでうまくいきました、本当にありがとうございます。

    ちなみに「new_l」の操作はどういった仕組みになっているのか教えていただけると幸いです。

    本当に助かりました、ありがとうございます!

ちなみに「new_l」の操作はどういった仕組みになっているのか教えていただけると幸いです。

new_l = [x[0] for x in l]

これは、リスト内包表記と呼ばれ「lの0番目の要素を取り出していって新しいリストを作る」というような操作をしています。
以下と同じような操作をしていることになります。

new_l = []
for temp_l in l:
    new_l.append(temp_l[0])

また、タプルでなくてもリストや辞書であっても同じような操作はできます。

# [名前, 国語の点数, 数学の点数, 英語の点数]
a = ['山田',100,80,60]
b = ['佐藤',70,90,90]
c = ['鈴木',60,60,100]

l = [a,b,c]
l.sort(key=lambda x: x[1])
new_l = [x[0] for x in l]
print("国語の点数順:" + str(new_l))

l.sort(key=lambda x: x[2])
new_l = [x[0] for x in l]
print("数学の点数順:" + str(new_l))

l.sort(key=lambda x: x[3])
new_l = [x[0] for x in l]
print("英語の点数順:" + str(new_l))
a = {"name":"山田", "japanese":100, "math":80, "english": 60}
b = {"name":"佐藤", "japanese":70, "math":90, "english": 90}
c = {"name":"鈴木", "japanese":60, "math":60, "english": 100}
l = [a,b,c]

l.sort(key=lambda x: x["japanese"])
new_l = [x["name"] for x in l]
print("国語の点数順:" + str(new_l))

l.sort(key=lambda x: x["math"])
new_l = [x["name"] for x in l]
print("数学の点数順:" + str(new_l))

l.sort(key=lambda x: x["english"])
new_l = [x["name"] for x in l]
print("英語の点数順:" + str(new_l))
国語の点数順:['鈴木', '佐藤', '山田']
数学の点数順:['鈴木', '山田', '佐藤']
英語の点数順:['山田', '佐藤', '鈴木']
0Like

Your answer might help someone💌