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

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

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

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

Python

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

Q&A

解決済

4回答

3219閲覧

Python:while文で値が存在する間ループする方法

Ykkykk

総合スコア140

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2018/10/24 04:19

while文を使用したループで、ループ内で指定したリストの値が存在する間ループするという条件の場合、どのように指定すればよいのでしょうか?

Python3

1i = 0 2lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 3lst2 = [] 4while lst[i]: 5 lst2 = lst[i] + lst[i+1] 6 i +=1

以上のような指定をしたのですが、うまくいきませんでした。
lstのi+1番目がある間はループして足していくというような処理を行いたいのですが、どのように「i+1番目が存在する間」という条件を指定するのでしょうか?
処理自体はfor文で実現できるかと思いますが、whileループでの上記のような条件の指定の仕方がわからないです。
ご教示いただけますと幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答4

0

ベストアンサー

python

1i = 0 2lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 3lst2 = [] 4while i+1<len(lst): 5 lst2 = lst[i] + lst[i+1] 6 i +=1

len()でリストの長さがとれますので、それよりもi+1が小さければi+1がリストの中を指すことになります。

投稿2018/10/24 04:26

hiro-k

総合スコア902

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

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

Ykkykk

2018/10/24 04:29

ご回答いただきありがとうございます。 実際に中に入っている値が存在するかどうかではなく、リストの長さで指定すればよいということですね。 気づきませんでした…。 ありがとうございます!
guest

0

実はforの場合、ループ対象のiterableの長さに達したときは、内部的に例外を投げてcatchすることでループを抜けています。

自分で同様のロジックを書くのはさすがに汚いので、他の方法を考えた方が良いです。


i < len(lst)-1とかでは駄目ですか?

ただし素直にこの通り書くとループのたびにlen(lst)が評価されてうまくないので、ループ前に一時変数に代入しておくことをおすすめします。

投稿2018/10/24 04:33

hayataka2049

総合スコア30933

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

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

Ykkykk

2018/10/24 04:37

ご回答いただきありがとうございます。 i < len(lst)-1をwhileの前にtempなどに代入する、ということでしょうか?
hayataka2049

2018/10/24 04:38

i < len(lst)-1を代入・・・すると無限ループになります tmp = len(lst) - 1 while i < tmp: ... という風にしてください
Ykkykk

2018/10/24 04:42

無限ループになるのですね。何度か試しているときに、無限ループのようになっていたのでそういうことだったのですね。 また、for文の構造についてもお教えくださりありがとうございます。 ありがとうございました!
guest

0

i+1番目がある間はループして足していく

入力 1, 2, 3, 4, 5, 6, 7, 8, 9 に対して、隣の値を足した配列 3, 5, 7, 9, 11, 13, 15, 17 を作成したのであれば、1つずらした部分配列をスライスで作成して、zip() で回せばよいです。

内包記法を使うと高速です。

python

1lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 2 3lst2 = [v1 + v2 for v1, v2 in zip(lst, lst[1:])] 4print(lst2) # [3, 5, 7, 9, 11, 13, 15, 17]

投稿2018/10/24 04:30

tiitoi

総合スコア21956

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

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

Ykkykk

2018/10/24 04:33

ご回答いただきありがとうございます。 スライスを使用して部分配列を作って回していくことができるのですね。 全く思いつきませんでした。勉強になりました。 ありがとうございます!
guest

0

プログラムの実行中に lst の長さは変わりません。
だから、ループさせる回数は予めわかっています。
その場合は while より for が良いです。

s.py

python3

1lst = [1, 2, 3, 4, 5, 6, 7, 8, 9] 2lst2 = [] 3for i in range(len(lst) - 1): 4 lst2 += [lst[i] + lst[i + 1]] 5 6print(lst2) 7 8lst3 = [lst[i] + lst[i + 1] for i in range(len(lst) - 1)] 9print(lst3)

実行例
イメージ説明

lst2 は普通の for の書き方です。
lst3 は内包表記というものです。

参考情報

  • pythonの内包表記を少し詳しく

https://qiita.com/y__sama/items/a2c458de97c4aa5a98e7

投稿2018/10/26 15:09

katoy

総合スコア22324

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問