12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】基本入力時の文字列ソート

Last updated at Posted at 2019-08-12

はじめに

Pythonで競プロをやっていると文字列のソートが意外とややこしいことに気付いたので、今回は文字列のソートの基本をまとめます。AtCoderのPython3.4.3と3.8で動作確認済みです。

一つの文字列

文字列をsとしたとき,sorted(s)で1文字ずつソートされたリストが返ってきます。

入力
bcaed
Python
s = sorted(input())
print(s)
出力
['a', 'b', 'c', 'd', 'e']

文字列のリスト (1次元)

文字列のリストをstr_listとしたとき,str_list.sort()sorted(str_list)でソートされたリストが返ってきます。

入力
az aj ab aa bc ad
Python
str_list = sorted(list(input().split()))
print(str_list)
出力
['aa', 'ab', 'ad', 'aj', 'az', 'bc']

文字列のリスト (2次元)

入力
3
az aj
ab aa
bc ad
Python
n = int(input())  #nは入力回数
str_list = [list(input().split()) for _ in range(n)]
print(sorted(sorted(str_list)))
出力
[['ab', 'aa'], ['az', 'aj'], ['bc', 'ad']]

素直にsortすると各リストの先頭要素をkeyとしてsortしていることが分かります。
では先頭以外の要素でソートしようとすると、以下のようになります。

Python
n = int(input())  # nは入力回数
str_list = [list(input().split()) for _ in range(n)]
print(sorted(str_list,key=lambda x:x[1]))  # 2番目の要素でソート
出力
[['ab', 'aa'], ['bc', 'ad'], ['az', 'aj']]

降順ソート

降順にソートしたいときは、reverse==Truesorted()のカッコ内に書き加えてください。

入力
az aj ab aa bc ad
Python
str_list = sorted(list(input().split()), reverse=True)
print(str_list)
出力
['bc', 'az', 'aj', 'ad', 'ab', 'aa']

さいごに

読んでいただきありがとうございました。指摘等ございましたらコメントお願いします。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?