本篇博客主要收集从各种渠道看到的有意思的Python程序片段。
目录
- 求斐波那契数列的两种方法
- 应用sorted函数针对序列中的某一项元素进行排序
- 应用map函数根据指定函数对序列做映射
- 应用zip函数将可迭代序列中的对应元素打包
- 应用all函数判断质数
1. 求斐波那契数列的两种方法
第一种
def fib(n):
if n==0 or n==1:
return 1
else:
return fib(n-1)+fib(n-2)
第一种方法采用了递归的方法,但这种方法大量重复的计算,主要体现在fib(n-1)和fib(n-2)有大量的重复。可以结合字典进行优化。
第二种
pre={0:1,1:1}
def fib(n):
if n in pre:
return pre[n]
else:
newvalue = fib(n-1)+fib(n-2)
pre[n] = newvalue #增加字典条目
return vewvalue
2. 应用sorted函数针对序列中的某一项元素进行排序
sorted和sort都可以用于排序。sort是应用在列表上的一个方法,它对已存在的列表进行操作。sorted是一个内建函数,可以对更多的数据类型进行排序操作并返回新的数据。
sorted(iterable[,key[,reverse]])
其中,key是用来比较的元素,只有一个参数,具体函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
students = [('江幸',89,15),('方鹏',80,14),('陈可',85,14)]
print(sorted(students,key = lambda s:s[1],reverse=True))
[('江幸',89,15),('陈可',85,14),('方鹏',80,14)]
3. 应用map函数根据指定函数对序列做映射
map(function,iterable,…),注意map函数返回的是可迭代数据,需要转换成list等输出。
print(list(map(lambda x,y:x+y,[1,3,5,7,9],[2,4,6,8,10])))
[3,7,11,15,19]
4. 应用zip函数将可迭代序列中的对应元素打包
zip(序列1,序列2,…),注意如果各序列的长度不一致,则返回的列表长度与最短的相同。另外,zip函数返回的是可迭代数据,需要转换成list等输出。
a = [1,2,3]
c = [4,5,6,7,8]
print(list(zip(a,c)))
[(1,4),(2,5),(3,6)]
d = {'blue':500,'red':100,'white':300}
print(dict(zip(d.values(),d.keys())))
{500: 'blue', 100: 'red', 300: 'white'}
print(list(zip(d.values(),d.keys())))
[(500, 'blue'), (100, 'red'), (300, 'white')]
可见,应用zip还可以轻松创建字典。
5. 应用all函数判断质数
all和any函数都以可迭代序列作为参数。当序列中的所有元素为True时,all返回True,否则为False。当序列中有一个元素为True时,any返回True,否则为False。
n = 47
all([1 if n%k !=0 else 0 for k in range(2,n))]
True
any([[],False,0])
False