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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

Q&A

解決済

5回答

1275閲覧

リストで連続している箇所を返したい。

wakiyamaa

総合スコア5

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

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

0グッド

0クリップ

投稿2021/06/07 10:10

前提・実現したいこと

連続している数字文字列の箇所がいくつあるのかをlistで返したいです。
"0999555003333777990001" このような数字文字列の場合
[2, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] #1回きりが2回,2回続きが2回,3回続きが4回,4回続きが1回 それ以上はなし
このようなOUTが出せるようにしたいです。

該当のソースコード

Python

1ind =[i for i in range(15)] 2for i in range(len(ind)): 3 ind[i] = 0 4ind 5#[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]のリストを作成した後 6def cont_num(s_int): #ind は何回続いているのが何箇所あるかを記録していきたいです 7 #先頭から1回,2回...の回数 8

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

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

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

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

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

guest

回答5

0

おはようございます。

問題文読ませていただきました。

こんな感じでいかがでしょうか?

python

1numList = list("0999555003333777990001") 2previousNum = numList[0] 3cnt = 0 4output = [0] * 15 5for num in numList: 6 if previousNum != num: 7 output[cnt - 1] = output[cnt - 1] + 1 8 previousNum = num 9 cnt = 1 10 else: 11 cnt = cnt + 1 12 13output[cnt - 1] = output[cnt - 1] + 1 14print(output)

ご確認のほど、よろしくお願いいたします。????‍♂️

投稿2021/06/07 23:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

wakiyamaa

2021/06/08 01:20

本当にありがとうございます。
退会済みユーザー

退会済みユーザー

2021/06/08 01:24

いえいえ。 また困ったこととかありましたら、気軽にご相談ください。 最後に素朴な疑問なのですが、差し支えなければどのようにteratailを始められたのか教えていただくことは可能でしょうか?????‍♂️
wakiyamaa

2021/06/08 02:27

pythonの勉強を今年4月くらいから始めて、資料に書いてある問題等を解いているのですが、for文とif文を組み合わせて関数を作る辺りで考え方が難しくなり、一人ではなかなか進まないと感じました。そこでプログラミング関連を質問できるteratailをネットで見つけて質問させて頂いております。。
wakiyamaa

2021/06/08 02:52

教えて頂いた物の途中にprint入れてみてどんな動きで目的のものを見つけているのかがとても分かりやすくなりました。ありがとうございます。よければまたよろしくお願いいたします!
退会済みユーザー

退会済みユーザー

2021/06/08 04:18

なるほど、1人で勉強するの難しいですよね〜。。 ネットで見つけられたんですね。貴重なご意見ありがとうございます。????‍♂️ > 教えて頂いた物の途中にprint入れてみてどんな動きで目的のものを見つけているのかがとても分かりやすくなりました。 お、デバックする心持ち素晴らしいです。はい、是非こちらこそよろしくお願いいたします。????‍♂️
guest

0

python

1from itertools import groupby 2from collections import Counter 3 4ind = "0999555003333777990001" 5 6count = Counter(len(list(g)) for k, g in groupby(ind)) 7print([count.get(i, 0) for i in range(1, 16)])

plain

1[2, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

いつか思い出してくれたら、ぐらいで。
https://docs.python.org/ja/3/library/collections.html#collections.Counter
https://docs.python.org/ja/3/library/itertools.html#itertools.groupby

投稿2021/06/07 10:52

quickquip

総合スコア11038

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

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

0

ベストアンサー

Python

1a = "0999555003333777990001" 2 3import re 4# まず分割 5print([x[0] for x in re.findall(r"((.)\2*)",a)]) 6#=> ['0', '999', '555', '00', '3333', '777', '99', '000', '1'] 7 8# 長さに直して、 9b = [len(x[0]) for x in re.findall(r"((.)\2*)",a)] 10print(b) 11#=> [1, 3, 3, 2, 4, 3, 2, 3, 1] 12 13# カウント 14c = [b.count(i) for i in range(1,16)] 15print(c) 16#=> [2, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

投稿2021/06/07 10:45

otn

総合スコア84531

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

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

wakiyamaa

2021/06/07 11:17

ありがとうございます。
guest

0

大道具を使うと以下です。
しかし、こういうコードを聞いても勉強にならないので、もう少し簡単な道具を使ったコードの方が欲しいのでしたら、そいういうように質問してください。

python

1import collections 2import re 3s_int = "0999555003333777990001" 4ind = [0] * 15 5dct = collections.Counter([len(x) for x,y in re.findall(r"((.)\2*)",s_int)]) 6for i in dct: 7 ind[i-1] = dct[i] 8 9print(ind)

実行結果

python

1>>> import collections 2>>> import re 3>>> s_int = "0999555003333777990001" 4>>> ind = [0] * 15 5>>> dct = collections.Counter([len(x) for x,y in re.findall(r"((.)\2*)",s_int)]) 6>>> for i in dct: 7... ind[i-1] = dct[i] 8... 9>>> print(ind) 10[2, 2, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

投稿2021/06/07 10:42

ppaul

総合スコア24666

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

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

0

まずは、あなたがその連続文字を数えるときにどうしているのかを考えてみましょう。
あなたのすることを、コードに書けばいいのです

投稿2021/06/07 10:37

y_waiwai

総合スコア87774

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問