前提・実現したいこと
任意の文字列からアルファベットだけを抽出し、最も出現頻度の高い文字を小文字で出力するプログラミングを書こうと思っていて(CheckiOの課題です)、Counterクラスとmost_common()メソッドを使うところまでは上手くいったのですが、得られたリスト(各要素は(文字(str):頻度(int))のタプル)からリスト内包表記を用いて最頻出の文字だけを格納した新しいリストを生成する過程でエラーが発生しました(インデックスが文字列だと認識されている・・・?)。
自分なりにいろいろ原因を調べてみたものの、如何せんグーグル先生へのクリティカルな訊き方がわからず徒労に終わってしまったので、どなたかご教授いただければと思います。
(コードはjupyter notebookで書きました)
発生している問題・エラーメッセージ
IndexError Traceback (most recent call last) <ipython-input-33-78c808d76157> in <module>() ----> 1 data3 = [data2[i][0] for i in range(len(data2)) if data[i][1] == data[0][1]] 2 data3 <ipython-input-33-78c808d76157> in <listcomp>(.0) ----> 1 data3 = [data2[i][0] for i in range(len(data2)) if data[i][1] == data[0][1]] 2 data3 IndexError: string index out of range
該当のソースコード
Python3
1from collections import Counter 2import re 3data = "One!" 4data2 = Counter(list(re.sub(r"\W","",data).lower())).most_common() 5data3 = [data2[i][0] for i in range(len(data2)) if data[i][1] == data[0][1]]
試したこと
リスト内包表記を使わずに書き直した場合はエラーが出なかったので、リスト内包表記の書き方の問題だとは思うのですが・・・。
Python3
1data3 = [] 2for i in range(len(data2)): 3 if data2[i][1] == data2[0][1]: 4 data3.append(data2[i][0]) 5data3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/31 05:16
2018/08/31 05:19