Help us understand the problem. What is going on with this article?

[Python3]任意の文字列に含まれる文字を数える

More than 1 year has passed since last update.

はじめに

昨日に引き続きcheckioの課題にトライ。
(普通に1時間以上かかっているので、平日はちょっと厳しそう)

今回書いたコード

入力した文字列から、アルファベットの数を数えて一番多い文字を返すプログラム。
(アルファベット以外は数えない。大文字小文字は区別しない)

def checkio(text: str) -> str:
    import re

    ### 変数定義
    phrase = text.lower() # 大文字,小文字は区別しない
    count_lst = []
    count = []
    result = []

    ### 処理開始
    for word in phrase:
        ### アルファベット以外は除外
        if not bool(re.match("[a-z]+",word)):
            continue
        flg = 0

        ### 文字の数を数えながらリストに格納
        for x in range(len(count_lst)):
            try:
                count_lst[x].index(word)
                count_lst[x][1] += 1
                flg = 1
                break
            except ValueError:
                pass

        ### フラグが0(リストに値が存在しない)の場合、リストに文字を追加
        if flg != 1:
            count_lst.append([word,1])

    ### リストから文字数だけをリストに格納
    for y in range(len(count_lst)):
        count.append(count_lst[y][1])
    max_num = max(count)

    ### 一番多い数だった文字をリストに格納
    for z in range(len(count_lst)):
        if count_lst[z][1] == max_num:
            result.append(count_lst[z][0])

    ### アルファベット順にソート
    result.sort()
    return(result[0])

今回学んだこと

  • アルファベットの数え方に少し苦労(アルファベット分変数を作れば簡単だったかもですが、さすがにクソダサだと思って自重)
  • リストの検索にはindex(毎回忘れるマン)
  • リストの要素数を数える時はlen
  • 二次元のリストでmax(またはmin)を使った場合、いずれも前にある要素について判定
  • sortでアルファベット順に並べ替えができる(便利)
  • 二次元のリストで検索をかけるならenumerate()を使っている例もあった(むしろこっちの方が本筋くさい。いつか調べる)
  • 「最初の一文字を除外」はword[1:]でできる(今回は使わなかった)

構文まとめ

メソッド 説明 構文
index リストに検索文字が含まれている場合、アドレスを返す(無い場合はValueError) word.index("検索文字")
len 文字数を数える。リストの場合は要素数を数える len("文字列")
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away