読者です 読者をやめる 読者になる 読者になる

simudaru's blog

Python, Rなどのメモを残していこうと思います。  よろしくお願いいたします。

keyの指定

感動したのでメモ。

唐突ですが、sortには、keyを指定することができます。
恥ずかしながら、知らなかったのですが。

# -*- coding: utf-8 -*-
x = list('ThisIsATest')
x.sort()
print x

# >>>
# ['A', 'I', 'T', 'T', 'e', 'h', 'i', 's', 's', 's', 't']
# 大文字は小文字よりコードポイントの値が小さい

# -------------------------------------------------------
# 小文字にしてから並び替え
x = list('ThisIsATest')
x.sort(key=str.lower)
print x

# >>>
# ['A', 'e', 'h', 'i', 'I', 's', 's', 's', 'T', 'T', 't']


そして、maxにも、keyを指定することができます。

# -*- coding: utf-8 -*-
x = list('ThisIsATest')
print max(x)

# >>>
# t
# 小文字のtが最大

x = list('ThisIsATest')
print max(x, key=str.lower)

# >>>
# T
# 小文字にしてから比較すると、tが最大
# 最大値が複数あるとき、maxは最初にある要素を返すので、大文字のTが返る


感動したのは、
リストに含まれる文字数が最大の文字を返す以下のコードです。

# -*- coding: utf-8 -*-
x = list('ThisIsATest')
print max(x, key=x.count)

# >>>
# s
# 文字のカウントが最大の要素を返す

x = list('ThisIsATest')
x = [z.lower() for z in x]
print max(x, key=x.count)

# >>>
# t
# 文字のカウントが最大の要素を返す
# s,tが同数なので、先に現れるtが返る

こんなに短くかけるなんて。
美しいですね。