Discuss / Python / filter

filter

Topic source

七月上行

#1 Created at ... [Delete] [Delete and Lock User]

和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。 注意到filter()函数返回的是一个Iterator,也就是一个惰性序列,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list。

这个功能好好理解!

def _odd_iter(): n = 1 while True: n = n + 2 yield n

def _not_divisible(n): return lambda x: x % n > 0

def primes(): yield 2 it = _odd_iter() # 初始序列 , 感觉就只调用了一次啊 while True: n = next(it) # 返回序列的第一个数 yield n it = filter(_not_divisible(n), it) # 构造新序列

#打印1000以内的素数: for n in primes(): if n < 1000: print(n) else: break

def is_palindrome(n):

#l = len(str(n)) 
#for i in range(l):
#    if (n//(pow(10,l-1-i)))%10 != (n//pow(10,i))%10:
#        return False
#return True
# 优化
l = len(str(n)) 
for i in range(l//2): #此时可以把前者的%10去掉,因为只遍历前一半(仅在1000内有效)
    print(n, n//(pow(10,l-1-i)), (n//pow(10,i))%10)
    if n//(pow(10,l-1-i)) != (n//pow(10,i))%10:
        return False
return True

  • 1

Reply