質問するログイン新規登録
Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2001閲覧

文字列から特定の文字をカウントする

python6051

総合スコア8

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/25 02:08

0

0

課題・解決したいこと

python初学者です。
ある文字列から特定の文字列が出現する回数をカウントしたいのですが、
SS #カウントする文字列
ABCDSSSFF #与えられる文字列
の場合にSSSの部分で重複して数えることはできるのでしょうか。
SSの一回目のカウントを(SS)S、二回目のカウントをS(SS)とカウントしたいです。
初歩的な質問になるのですが、よろしければご回答よろしくお願いします。

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

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

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

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

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

dodox86

2020/04/25 02:16

そのような文字列を自動的にカウントするメソッドのようなものがあるか、それとも自力でコードを書いてできるものか、と言うご質問でしょうか? (自力でやるなら何でもできますので、確認です)
python6051

2020/04/25 02:24

自力でコードを書いてカウントできるか、という質問です???? よろしくお願いします(__)
dodox86

2020/04/25 02:36

「できるか/できないか」と言うご質問ですと、「できる」で終わってしまいます。それでよいのでしょうか。そうではないのであれば、やり方のヒントとしては例えばstr.findが使えますが、どうでしょう。 https://docs.python.org/ja/3.7/library/stdtypes.html?highlight=find#str.find
python6051

2020/04/25 03:16

少し考えてみたのですが、うまく実行できていません。。。 str.find(sub[i:i+len(s)]) for i in range(len(str))) str #文字列 sub # カウントする文字列 で重複してカウントすることは可能でしょうか...? 何度も申し訳ありません。
dodox86

2020/04/25 03:36

複雑に考えすぎなのだと思います。回答しました。
guest

回答2

0

質問者さんご自身でコードを組み立てたいのかなと思って控えていましたが、コメントした手前、回答します。str.findを用いた、愚直にwhileループ内で数えるコード例です。str.findでまず、対象の文字列位置を得て+1、ひとつ右へずらして再検索していきます。人間(少なくとも私)が頭の中で考える方法をそのまま実装しています。

Python3

1def count(text, part): 2 num = 0 3 4 # 検索位置を先頭に 5 pos = 0 6 while True: 7 pos = text.find(part, pos) 8 if pos == -1: 9 break; 10 11 num = num + 1 12 # 検索位置を右に+1 13 pos = pos + 1 14 15 return num 16 17n = count('ABCDSSSFF', 'SS') 18print('#1 {} は {}個'.format('SS', n)) 19 20n = count('ABCDSSSFF', 'S') 21print('#2 {} は {}個'.format('S', n)) 22 23n = count('ABCDSSSFF', 'X') 24print('#3 {} は {}個'.format('X', n)) 25

実行例です。

sh

1$ python3 t2.py 2#1 SS は 2個 3#2 S は 3個 4#3 X は 0個

※Pythonに慣れ、思考がコードに直結するようになると、別回答でいただいたようなスマートなコードが即、出てくるようになるのだと思います。

投稿2020/04/25 03:34

dodox86

総合スコア9418

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

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

dodox86

2020/04/25 03:39

> Pythonに慣れ、思考がコードに直結する ちなみに私は"Pythonならでは"、と言うコードは自信が無く、そこまでの域に達していません。回答しといてすみません。
python6051

2020/04/25 03:54

丁寧に教えていただきありがとうございました。 ループで処理する方法の参考にさせていただきます<(_ _)>
guest

0

ベストアンサー

こうですか?

python

1>>> def count(text, part): 2... return sum(text.startswith(part, i) for i in range(len(text))) 3... 4>>> count('ABCDSSSFF', 'SS') 52

投稿2020/04/25 02:32

shiracamus

総合スコア5406

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

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

python6051

2020/04/25 02:48

回答ありがとうございます。 startswithという関数があるのですね! textのi番目の文字から見てpartで始まっているかどうかを、一文字ずつズラして繰り返し確認している、という解釈で合っているでしょうか?
shiracamus

2020/04/25 02:59

はいそうです。
python6051

2020/04/25 03:08

ありがとうございます(__)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問