Python利用filter()删除1-100内素数

in Python with 2 comments

素数,是只能被1或者自己整除的大于1的自然数。

#!/usr/bin/env python
#coding:utf-8
import math
def fil(n):    #定义fil函数
    flag = 0    #设置flag
    for i in range(2, int(math.sqrt(n)+1)):
        if n%i == 0:    #判断是否是素数
            flag = 1     #如果不是,flag设为1
            break        #break
    if flag == 1:        #退出循环判断flag,若为1(即不是素数),则返回其值
        return n

print filter(fil, range(1,101))    #filter 1-100里的素数

另一种方法,代码量少,计算量多:

def fil(x):
    for y in range(2,x):
        if x%y==0:
            return True
    return False
print filter(fil,range(2,101))
Responses
选择表情选择表情
  1. test

    def fil(x):
    for y in range(2,x):
    if x%y==0:
    return True
    return False
    print filter(fil,range(2,101))

    测试未通过

    Reply
    1. @test

      Python2是没问题的。
      Python3因为filter函数返回的是filter迭代器,所以应当对其进行遍历。
      代码改动如下:

      filter_list = [item for item in filter(fil, range(1,101))]
      print(filter_list)

      Reply