python代码注释有几种方式 python代码示例( 三 )


好 。我们继续其它函数 。
二十四、filterPython内建的filter()函数用于过滤序列 。
和map()类似 。filter()也接收一个函数和一个序列 。和map()不同的是 。filter()把传入的函数依次作用于每个元素 。然后根据返回值是True还是False决定保留还是丢弃该元素 。
简单例子 。删掉偶数:
defis_odd(n):returnn%2==1list(filter(is_odd,[1,2,4,5,6,9,10,15]))#结果:[1,5,9,15]
我们可以用所学知识实现埃氏筛:
素数基本(埃氏筛法)
(1)检查n是否为素数
最简单思路:所有可能的因数全部试一遍 。
int gg(int n)
{
for(int i=2;i<n;i++){
if((n%i)==0)return 0;//有因数就不是素数咯
}
return 1;
}
进一步思考:没必要枚举所有的数 。每一个小于n^(1/2)的因数i 。一定有一个大于n^(1/2)的因数j与之对应 。也就是i*j=n 。所以枚举小于等于n^(1/2)的因数即可
int gg(int n)
{
for(int i=2;i*i<=n;i++){
if((n%i)==0)return 0;
}
return 1;
}
(2)约数枚举
上面已经说过 。不需要枚举所有因数 。枚举出某小因数以后算出对应的大因数即可 。
vector<int> gg(int n)
{
vector<int> a;
for(int i=2;i*i<=n;i++){
if((n%i)==0){
a.push_back(i);
if((n/i)!=i)a.push_back(n/i);//根号n的情况不要重复添加
}
}
return a;
}
(3)埃氏筛法
只对一个整数操作 。O(N) 。已经足够了 。如果对许多整数进行素性检测 。还有更高效的算法 。比如埃氏筛法 。
问题:枚举n以内所有素数
操作:先把所有整数列出来 。然后把2的倍数全部剔除 。然后是三的 。以此类推 。遍历所有素数 。把倍数全部划去 。
对于每个数字i 。如果没被划去 。他一定是素数 。因为他不是任何2到i-1数字的倍数 。然后就开始划它的倍数就好 。
int a[maxx];
int b[maxx+1];
int gg(int n)
{
int p=0;//记录素数个数
for(int i=0;i<n+1;i++)b[i]=1;
b[0]=0;
b[1]=0;
//准备完毕
for(int i=2;i<=n;i++){
if(b[i]){
a[p++]=i;//记录素数和个数
for(int j=2*i;j<=n;j+=i)b[j]=0;//剔除倍数
}
}
return p;//返回素数个数
}
本代码非原创:
#先构造一个从3开始的奇数序列:def_odd_iter():n=1whileTrue:n=n+2yieldn#这是一个生成器 。并且是一个无限序列 。#筛选函数def_not_divisible(n):returnlambdax:x%n>0#生成器defprimes():yield2it=_odd_iter()#初始序列whileTrue:n=next(it)#返回序列的第一个数yieldnit=filter(_not_divisible(n),it)#构造新序列
利用filter()不断产生筛选后的新的序列
Iterator是惰性计算的序列 。所以我们可以用Python表示“全体自然数” 。“全体素数”这样的序列 。而代码非常简洁 。
二十五、sorted>>>sorted([36,5,-12,9,-21])[-21,-12,5,9,36]#可以接收一个key函数来实现自定义的排序 。例如按绝对值大小排序:>>>sorted([36,5,-12,9,-21],key=abs)[5,9,-12,-21,36]
我们再看一个字符串排序的例子:
>>>sorted(['bob','about','Zoo','Credit'])['Credit','Zoo','about','bob']
默认情况下 。对字符串排序 。是按照ASCII的大小比较的 。由于’Z’ < ‘a’ 。结果 。大写字母Z会排在小写字母a的前面 。
现在 。我们提出排序应该忽略大小写 。按照字母序排序 。要实现这个算法 。不必对现有代码大加改动 。只要我们能用一个key函数把字符串映射为忽略大小写排序即可 。忽略大小写来比较两个字符串 。实际上就是先把字符串都变成大写(或者都变成小写) 。再比较 。
这样 。我们给sorted传入key函数 。即可实现忽略大小写的排序:
>>>sorted(['bob','about','Zoo','Credit'],key=str.lower)['about','bob','Credit','Zoo']
要进行反向排序 。不必改动key函数 。可以传入第三个参数reverse=True:
>>>sorted(['bob','about','Zoo','Credit'],key=str.lower,reverse=True)['Zoo','Credit','bob','about']
从上述例子可以看出 。高阶函数的抽象能力是非常强大的 。而且 。核心代码可以保持得非常简洁 。
【python代码注释有几种方式 python代码示例】sorted()也是一个高阶函数 。用sorted()排序的关键在于实现一个映射函数 。

推荐阅读