質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

505閲覧

リスト内包表記でのIndexError

Nagyon-Jessica

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/08/31 04:46

前提・実現したいこと

任意の文字列からアルファベットだけを抽出し、最も出現頻度の高い文字を小文字で出力するプログラミングを書こうと思っていて(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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1# 間違い(質問文のコード) 2data3 = [data2[i][0] for i in range(len(data2)) if data[i][1] == data[0][1]] 3 4# 正解 5data3 = [data2[i][0] for i in range(len(data2)) if data2[i][1] == data2[0][1]]

投稿2018/08/31 05:15

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/08/31 05:16

内容の正しさやコードの良し悪しについては責任を負いません。「リスト内包表記を使わずに書き直した場合」を見てこうだろうなぁというものを書いただけです
Nagyon-Jessica

2018/08/31 05:19

余りにも初歩的すぎるミスで申し訳ないです・・・。 書き換えたら上手くいきました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問