十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
8个超好用内置函数set(),eval(),sorted(),reversed(),map(),reduce(),filter(),enumerate()
创新互联建站服务项目包括怀安网站建设、怀安网站制作、怀安网页制作以及怀安网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,怀安网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到怀安省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
python中有许多内置函数,不像print那么广为人知,但它们却异常的强大,用好了可以大大提高代码效率。
这次来梳理下8个好用的python内置函数
1、set()
当需要对一个列表进行去重操作的时候,set()函数就派上用场了。
用于创建一个集合,集合里的元素是无序且不重复的。集合对象创建后,还能使用并集、交集、差集功能。
2、eval()之前有人问如何用python写一个四则运算器,输入字符串公式,直接产生结果。用eval()来做就很简单:eval(str_expression)作用是将字符串转换成表达式,并且执行。
3、sorted()在处理数据过程中,我们经常会用到排序操作,比如将列表、字典、元组里面的元素正/倒排序。这时候就需要用到sorted() ,它可以对任何可迭代对象进行排序,并返回列表。对列表升序操作:
对元组倒序操作:
使用参数:key,根据自定义规则,按字符串长度来排序:
根据自定义规则,对元组构成的列表进行排序:
4、reversed()如果需要对序列的元素进行反转操作,reversed()函数能帮到你。reversed()接受一个序列,将序列里的元素反转,并最终返回迭代器。
5、map()做文本处理的时候,假如要对序列里的每个单词进行大写转化操作。这个时候就可以使用map()函数。
map()会根据提供的函数,对指定的序列做映射,最终返回迭代器。也就是说map()函数会把序列里的每一个元素用指定的方法加工一遍,最终返回给你加工好的序列。举个例子,对列表里的每个数字作平方处理:
6、reduce()前面说到对列表里的每个数字作平方处理,用map()函数。那我想将列表里的每个元素相乘,该怎么做呢?这时候用到reduce()函数。
reduce()会对参数序列中元素进行累积。第一、第二个元素先进行函数操作,生成的结果再和第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果。再举个例子,将字母连接成字符串。
你可能已经注意到,reduce()函数在python3里已经不再是内置函数,而是迁移到了functools模块中。这里把reduce()函数拎出来讲,是因为它太重要了。
7、filter()一些数字组成的列表,要把其中偶数去掉,该怎么做呢?
filter()函数轻松完成了任务,它用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象。filter()函数和map()、reduce()函数类似,都是将序列里的每个元素映射到函数,最终返回结果。我们再试试,如何从许多单词里挑出包含字母w的单词。
8、enumerate()这样一个场景,同时打印出序列里每一个元素和它对应的顺序号,我们用enumerate()函数做做看。
enumerate翻译过来是枚举、列举的意思,所以说enumerate()函数用于对序列里的元素进行顺序标注,返回(元素、索引)组成的迭代器。再举个例子说明,对字符串进行标注,返回每个字母和其索引。
按照题目要求编写的Python阶乘程序如下
def factorial(n): #定义阶乘函数
f=1 #累乘器赋初值1
for i in range(1,n+1): #for_i循环变量i从1到n变化
f=f*i #f累乘i
return f #返回n的阶乘结果f
n=int(input("请输入n:")) #输入n的值
print(factorial(n)) #打印n!结果
源代码(注意源代码的缩进)
解法1
数组解法牛。
首先定义一个ns数组用来存储n!的各个位数上的数值,利用for循环给ns加入10000个0值,以方便后面直接根据index对数组进行操作。
然后定义length作为 “数组的长度”(有真实数值的而非自动添加的0) 也即n!的结果的位数。
之后也必须用到for循环进行累乘,但跟解法一的直接累乘不同,这里是乘数(即i)跟各个位上的数分别相乘,若结果大于等于10则carry0即向前进一位数值为carry,若j循环结束后carry0则说明需要在当前ns的“长度”上进一位,所以length+1即位数+1,这里carry起的就是判断是否进位的作用,而length则代表着结果的位数。
n= int(input())
ns = [0 for i in range(10000) ]
n= int(input())
ns = [0 for i in range(10000) ]
length = 1
ns[0] = length = 1
if n=2:
#for i in range(2,n+1):
##carry = 0
##for j in range(length):
###temp = ns[j] * i + carry
###carry = int(temp/10)
###ns[j] = temp % 10
##while carry0:
###ns[length] += carry%10
###length+=1
###carry = int(carry/10)
while length0:
#length -=1
#print(ns[length],end='')
把# 替换为空格就可以运行。
如输入1000,计算1000!
解法2
print()
m=int(input("计算m!,请输入整数m:"))
import math
a=sum([math.log10(i) for i in range(1,m+1)])
b=int(a)
c=a-b
print(f'{m}!={10**c}*10^{b}')
答: 在这里我的思路是利用Python函数同时接受多个参数,然后在函数的内部,它的功能是返回各输入参数对应的乘积。如下所示,可以使用*nums作为输入参数以同时接受多个参数。对应代码如下所示:
本次例子是对1,3,5,7和9进行累乘,本次的结果为945,如下所示,计算正确。
同样地,我们也可以使用其他例子进行测试,也可以得到正确的结果。
1、定义一个使用不定长参数的函数,并在函数中打印出参数及其类型,统计传入参数的个数
def test(a,b,*args,c=10,**kwargs):
print("a=",a)
print("b=",b)
print("args=",args)
print("c=",c)
print("kwargs=",kwargs)
print("参数总长度:",1+1+len(args)+1+len(kwargs))
test(1,2,3,4,5,m=4)
def test(a,b,c=10,*args,**kwargs):
print("a=",a)
print("b=",b)
print("args=",args)
print("c=",c)
print("kwargs=",kwargs)
print("参数总长度:",1+1+len(args)+1+len(kwargs))
test(1,2,3,4,5,m=4)
2、定义一个函数max,接受的参数类型是数值,最终返回两个数中的最大值
def max(num1,num2):
if num1num2:
return num1
else:
return num2
3、定义一个函数min,接受的参数类型是数值,最终返回两个数中的最小值
def min(num1,num2):
if num1num2:
return num1
else:
return num2
4、分别定义加减乘除四个函数实现两个数之间的加减乘除操作
# 加法
def add(a,b):
return a+b
# 减法
def sub(a,b):
return a-b
# 乘法
def mul(a,b):
return a*b
# 除法
def div(a,b):
if b==0:
return 0
else:
return a/b
5、分别定义加减乘除四个函数,然后实现多个数之间的累加累减累除累乘操作,如[1,2,3,4,5],累加即是1+2+3+4+5,注意当使用除法时,应判断被除数不能为0
#累加
def add(a,b,*args):
s=a+b
for i in args:
s=s+i
return s
#累减
def sub(a,b,*args):
s=a-b
for i in args:
s=s-i
return s
#累乘
def mul(a,b,*args):
s=a*b
for i in args:
s=s*i
return s
#累除
def div(a,b,*args):
if b==0:
return a
else:
s=a/b
for i in args:
if i ==0:
continue
else:
s=a/b
return s
6、使用不定长参数定义一个函数max_min,接受的参数类型是数值,最终返回这些数中的最大值和最小值——错题
def max_min(*args):
max=0
min=0
if len(args)==0:
return 0,0
elif len(args)==1:
return args[0],args[0]
else:
max=args[0]
min=args[0]
for i in args:
if maxi:
max=i
if mini:
min=i
return max,min
7、定义一个函数,返回n的阶乘的最后结果,并打印出如5阶乘"5!=120”的效果——错题
def f(n):
s=1
for i in range(n):
s=s*(i+1)
print('%s!=%s' %(n,s))
f(5)
8、定义一个函数,返回由n(包含n)以内的奇数或者偶数组成的列表,默认返回全是奇数的列表
def f(n,type='j'):
ls=[]
if type=='j':
for i in range(1,n+1):
if i%2==1:
ls.append(i)
if type=='o':
for i in range(1,n+1):
if i%2==0:
ls.append(i)
return ls
9、定义一个函数,打印出n以内的所有的素数(指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。)——错题
def f(n):
ls=[2]
for i in range(3,n):
for j in range(2,i):
if i%j == 0:
break
else:
ls.append(i)
print(ls)
10、定义一个函数,接受三个参数,分别为字符串s、数值a1、数值a2,将字符串s从下标a1开始的a2个字符删除,并把结果返回,a2默认值为0——错题
def cut_str(s,a1,a2=0):
length = len(s)
if a1+1length or a2 == 0:
return s
else:
s1 = s[:a1]
s2 = s[a1+a2:]
return s1+s2
print(cut_str("hello",6,1))
11、请定义两个函数,一个函数画正方形,一个函数画三角形,并且可以从键盘输入值来决定画正方形还是画三角形以及决定是否退出程序
我的答案:
import turtle
def z():
for i in range(4):
turtle.fd(20)
turtle.right(90)
def s():
for i in range(3):
turtle.fd(20)
turtle.right(120)
m=input('请输入值,z画正方形,s画三角形,其它任意键退出程序:')
if m =='z':
z()
elif m=='s':
s()
else:
print('退出程序')
官方答案:
def square(n):
for i in range(n):
print("*"*n)
def triangle(n):
for i in range(n):
print("*"*(i+1))
12、定义函数findall,实现对字符串find方法的进一步封装,要求返回符合要求的所有位置的起始下标,如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,最后将返回一个元组(0,10,21,29),即将h的下标全部返回出来,而find方法只能返回第一个——没懂
def findall(string, s):
ret = []
if s=='':
return ret
while True:
index = string.find(s)
if index != -1:
if len(ret)!=0:
ret.append(ret[-1]+index+len(s))
else:
ret.append(index)
string = string[index+len(s):]
else:
break
return ret
print(findall("abc-abc-abc-","-"))
import math
n = int(input("请输入一个正整数:"))
# 计算阶层
result = math.factorial(n)
# 输出结果
print("{}! = {}".format(n, result))