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

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

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

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

Python

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

Q&A

4回答

1152閲覧

リスト内の要素の足していき、ある数字を超えた時にどこで超えたかを出力したい

KenAlive

総合スコア11

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2021/11/25 11:14

編集2021/11/25 12:06

リストを左から4回まで順番に足してゆき、Aである12を超えた時にその番目を出力し、ループを抜けたいです。
この場合だと3回目に15になるので3を出力したいです。

python

1A = 12 2B = 4 3lis = [1, 3, 10, 19] 4---------- 5ほしい出力 6ans = 3

この場合だと2回まで足せて、3と19を足した時に初めてAの20を超えるので4を出力したいです。

python

1A = 20 2B = 2 3lis = [1, 10, 3, 19] 4---------- 5ほしい出力 6ans = 4

この場合、1+10 10+3 3+19 19 と2回まで足した結果が A の20 を超えたインデックス番号の4を出力したいです。

よろしくお願いいたします。

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

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

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

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

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

meg_

2021/11/25 11:22

> Kである12 Kが見当たらないのですが。
KenAlive

2021/11/25 11:25

KではなくAでした。よろしくお願いいたします。
meg_

2021/11/25 11:26

> リストを左から4回まで順番に足してゆき 上記のコードは書けますか?
KenAlive

2021/11/25 11:34

lis = [1, 3, 10, 19] res = 0 for i in range(4): res += lis[i] print(res) こうでしょうか
TakaiY

2021/11/25 11:40

それが書けるなら、そこに「Aである12を超えた時にその番目を出力し、ループを抜け」る処理を足せばいいだげでしょう。 そこで、何がわからないのでしょうか? また、回答はここではなく、質問を編集してください。
meg_

2021/11/25 11:41

1つ目は > リストを左から4回まで順番に足してゆき 2つ目は > この場合だと2回まで足せて の条件で解きたい課題は2種類あるということですか? 1つ目のはforとifで解けますが、2つ目は組み合わせの問題ですか?2つ目の解が「4」になるのもよく分かりません。
meg_

2021/11/25 11:43

> 3と19を足した時に初めてAの20を超えるので 「初めて」の定義もよく分かりません。
guest

回答4

0

B を連続して足すことができる数として

Python

1def get_index(a, b, lis): # 1 origin index 2 ans = [i for m in range(b) for i in range(len(lis)) if sum(lis[i-m if i>m else 0:i+1]) > a] 3 return sorted(ans)[0]+1 if ans else None 4 5A = 12 6B = 4 7lis = [1, 3, 10, 19] 8print(get_index(A, B, lis)) # 3 9 10A = 20 11B = 2 12lis = [1, 10, 3, 19] 13print(get_index(A, B, lis)) # 4 14

投稿2021/11/26 09:34

lehshell

総合スコア1147

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

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

0

変数Bの値に関わらずリストの左から2要素ずつを加算していくのに変わりはないので、変数Bが存在する意味がよくわかりませんが、とりあえず要件通りには動くコードかと思います。

python

1A = 12 2B = 4 3total = 0 4cnt = 0 5l = [1, 10, 3, 19] 6for i in l: 7 total += i 8 cnt += 1 9 if total >= A: 10 print(cnt) 11 break

投稿2021/11/26 07:51

編集2021/11/26 07:52
1129kf

総合スコア8

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

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

退会済みユーザー

退会済みユーザー

2021/11/26 08:12

質問の最初で「リストを左から4回まで」とあり、この例ではB=4なので、Bは足すことのできる数字の個数上限ではないかと思います。まあ実際のところは質問者さんにしか分からないのですが。
guest

0

itertools.accumulate()
今回のような累積和なら上記の関数が使えるのでググってみてください。
特に処理速度とかを考えないならif文で都度判定させた後、for文からbreakで抜ければ大丈夫な気がします。

投稿2021/11/26 05:04

1129kf

総合スコア8

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

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

退会済みユーザー

退会済みユーザー

2021/11/26 06:03

リストにマイナスの値が含まれる場合でもaccumulateでうまく処理できますか? たとえば、A, B, lis = 5, 3, [0, 0, 5, -100, 10, 10, 10, 10, 10, 10]の場合、期待値は5になると思いますが。
1129kf

2021/11/26 07:49

accumulate関数自体はリスト内にマイナスがあろうと正常に加算されるはずですが、今回の要件は左から加算される数に制限があるのですね。。見落としていました。失礼いたしました。 他に回答を載せます。
guest

0

参考となるページを書いておきますので、あとはご自身で考えてください。

Python, enumerateの使い方: リストの要素とインデックスを取得を読んでください。

投稿2021/11/25 11:41

ppaul

総合スコア24666

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問