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

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

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

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

Q&A

解決済

1回答

378閲覧

[Python]リスト内包表記の計算結果の格納について

hnsky

総合スコア13

Python

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

1グッド

0クリップ

投稿2018/11/10 03:57

質問

リスト内包表記についての質問です。

現在、素数判定のプログラムを作成しています。
リスト内包表記を使用し結果をリストにするときの挙動なのですが、
ソースコード①ではnumList(50までの整数)に格納していますが、
ソースコード②では新たにリストprime_listを用意して格納しています。

ソースコード①、②で実行結果が変わるのはなぜでしょうか。

ソースコード①

def calc_prime_num(N): num_list = range(2, N + 1) for i in range(2, int(N ** 0.5) + 1): num_list = [x for x in num_list if (x == i or x % i != 0)] print(num_list) calc_prime_num(50)

実行結果①

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

ソースコード②

def calc_prime_num(N): num_list = range(2, N + 1) for i in range(2, int(N ** 0.5) + 1): prime_list = [x for x in num_list if (x == i or x % i != 0)] print(prime_list) calc_prime_num(100)

実行結果②

[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50]
Ashburnn👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

内包表記でのループ対象のnum_listを書き換えるので、2回目以降の外側のforループの結果で違いが出てきます。

python

1def calc_prime_num1(N): 2 num_list = range(2, N + 1) 3 4 for i in range(2, int(N ** 0.5) + 1): 5 print(num_list) 6 num_list = [x for x in num_list if (x == i or x % i != 0)] 7 8 print("result", num_list) 9 10def calc_prime_num2(N): 11 num_list = range(2, N + 1) 12 13 for i in range(2, int(N ** 0.5) + 1): 14 print(num_list) 15 prime_list = [x for x in num_list if (x == i or x % i != 0)] 16 17 print("result", prime_list) 18 19print(1) 20calc_prime_num1(50) 21 22print(2) 23calc_prime_num2(50) 24 25 26""" => 271 28range(2, 51) 29[2, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49] 30[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49] 31[2, 3, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, 35, 37, 41, 43, 47, 49] 32[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 49] 33[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 49] 34result [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47] 352 36range(2, 51) 37range(2, 51) 38range(2, 51) 39range(2, 51) 40range(2, 51) 41range(2, 51) 42result [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 18, 19, 20, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 43, 44, 45, 46, 47, 48, 50] 43"""

投稿2018/11/10 04:10

編集2018/11/10 04:15
hayataka2049

総合スコア30933

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

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

hnsky

2018/11/10 04:57 編集

ご回答ありがとうございました! リストの変化を見てアルゴリズムそのものを誤解していたことに気づきました。 お助けいただき感謝いたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問