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

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

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

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

Q&A

解決済

1回答

1129閲覧

Pythonで素数を羅列したい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/08/22 05:30

Pythonで100までの素数を羅列してみたくてインターネットで調べたのですが難しくて理解ができませんでした。初歩的なやり方でやってみようと思い、
a = list(range(2,100))
としてリストを作り、とりあえず3の倍数をのぞいてみようと思いました。
if文と%を使って、3で割って余りが0ならばa.remove()で取り除くといったようなプログラムを作りたいのですが、
if (リストの中のすべての数字)%3 = 0までは考えたのですが(リストの中のすべての数字)をどのように表したらいいのかわかりせん。またそれをa.remove()で取り除く方法も今のところ見当がつかないです。初歩的な質問で申し訳ないのですがどなたか回答お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

filter(残す条件, 配列) で 3で割ったあまりが0でない要素だけ抽出すればいいと思います。

python

1a = list(range(2, 100)) 2 3a = list(filter(lambda x: x % 3 != 0, a)) 4print(a)

追記

もしあればfilter(関数,配列)のところでlambaを用いない方法を教えていただきたいです。

lambda はただの関数の省略記法なので、lambda の部分を関数に置き換えると以下になります。

python

1a = list(range(2, 100)) 2 3def is_multiple_of_three(x): 4 # x が 3 で割り切れる場合は False そうでない場合は True を返す 5 return x % 3 != 0 6 7a = list(filter(is_multiple_of_three, a)) 8print(a)

また今回は3でやりましたが2~100までまとめてfilterにかけることはできるのでしょうか。これに関しては少し自分で考えたいのでできるかどうかを教えていただきたいです。

filter() 使うより、素数の定義に従って、コードを書いたほうがいいと思います。

素数の定義は「2以上の整数」で「1 と自分自身以外で割り切れない数」なので、ある数 x が素数かどうかは以下のループで if 文に1つでもマッチするものがあるかどうかで判定できますね。

for y in range(2, x): if x % y == 0: break

なので、1回も条件式に引っかからないものが素数なので、それをリストに追加していけば、素数のリストができます。

python

1a = list(range(2, 100)) 2prime = [] 3 4for x in a: 5 # 2, ..., x - 1 の中で割り切れる数があるかどうか調べる 6 for y in range(2, x): 7 if x % y == 0: 8 break 9 else: 10 # break しなかった場合 11 # 割り切れる数が 1 または x 以外になければ素数 12 prime.append(x) 13print(prime)

素数判定部分を関数化すると

python

1a = list(range(2, 100)) 2 3 4def is_prime(x): 5 for y in range(2, x): 6 if x % y == 0: 7 return False 8 9 return True 10 11 12prime = [] 13for x in a: 14 if is_prime(x): 15 prime.append(x) 16print(prime)

より効率的に見つけられるアルゴリズムはありますが、定義に従い、素朴に実装すると上記のようになります。

投稿2020/08/22 05:35

編集2020/08/22 06:03
tiitoi

総合スコア21956

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

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

退会済みユーザー

退会済みユーザー

2020/08/22 05:43

もしあればfilter(関数,配列)のところでlambaを用いない方法を教えていただきたいです。 また今回は3でやりましたが2~100までまとめてfilterにかけることはできるのでしょうか。これに関しては少し自分で考えたいのでできるかどうかを教えていただきたいです。
tiitoi

2020/08/22 05:58 編集

「3で割って余りが0の要素を除く方法」が質問内容だったので、filter を使ったやり方を紹介しましたが、素数の一覧を作ることが最終的な目的であれば、素数の定義に従い、実装したほうがいいと思います。
退会済みユーザー

退会済みユーザー

2020/08/23 04:39

filterの使い方もこの際おぼえました。とても分かりやすい説明で理解できました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問