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:43
2020/08/22 05:58 編集
退会済みユーザー
2020/08/23 04:39