1.列表的去重
方法1:保持原列表的顺序
l=[1,2,2,4,8,7]
l1=list(set(l))#使用set()去重,无序
l2=sorted(l1,key=l.index)#使用sorted的key关键字按列表l的索引值排序
#或者使用list自带的方法sort
l1.sort(key=l.index)
方法2:利用字典的fromkeys()
l=[1,2,2,4,8,7]
l1=list({}.fromkeys(l).keys())#
方法3:利用新的列表
def func(l):
l1=[]
for x in l:
if x not in l1:
l1.append(x)
return l1
l=[1,2,2,4,8,7]
print(func(l))
2.字符串的反转
方法1:使用切片步长
str1="hello"
print(str1[::-1])
方法2:利用reduce函数
from functools import reduce
str1="hello"
reduce(lambda x,y:y+x,str1)
3.字典的key与value反转
方法1:使用zip函数
dic={"age":18,"name":"aliy"}
l1=list(dic.keys()) #获取字典的所有key
l2=list(dic.values()) #获取字典的所有value
dic2=dict(zip(l2,l1)) #通过zip函数组装
print(dic2)
方法2:利用字典推导式及字典的dict.items()方法
dic={"age":18,"name":"aliy"}
dic3={v:k for k,v in dic.items()}
print(dic3)
4.统计字符串中字母出现的次数
方法1:利用Counter()方法
from collections import Counter
str1="hello world"
str1=str1.replace(' ','') #先去除字符串中的空格
collect=Counter(str1)
#运行结果
Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
方法2:利用字典的setdefault()方法
str1="hello world"
str1=str1.replace(' ','')
#新建一个字典,key用于存放字符串中的字符,value存放字符出现的次数
dic={}
for i in str1:
#使用setdefault()向dic插入键值对,key为字符串中的每个字符,value为0
dic.setdefault(i,0)
#读入str1字符串中的字符后,修改对应值+1
dic[i]+=1
#运行结果
{'h': 1, 'e': 1, 'l': 3, 'o': 2, 'w': 1, 'r': 1, 'd': 1}
5.斐波拉契数列
#求n以内的斐波拉契数列
def func(n):
i,j=0,1
l=[0,1]
while i+j<n:
num=i+j
l.append(num)
i,j=j,num
print(l)
func(100)
#运行结果
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
6.冒泡排序
def func(l):
for i in range(len(l)):
for j in range(i,len(l)):
if l[i]>l[j]:
l[i],l[j]=l[j],l[i]
return l
l=[1,5,2,1,0,6,7,4]
print(func(l))
#运行结果
[0, 1, 1, 2, 4, 5, 6, 7]
7.不使用循环,打印1-n
循环可以用迭代来等价实现
def prints(n):
if n>0:
prints(n-1)
print(n,end=' ') #end=' ',使用空格代替换行
prints(10)
#运行结果
1 2 3 4 5 6 7 8 9 10
8.计算n的阶乘
方法1:使用迭代
def func(n):
if n==1:
return n
return n*func(n-1)
func(10)
#运行结果
3628800
方法2:使用reduce
from functools import reduce
print(reduce((lambda x,y:x*y),range(1,11)))
#运行结果
3628800
9.找出两个字符串中的最大公共子串
def func(str1,str2):
maxStr=0
p=0
record=[[0 for i in range(len(str2)+1)] for j in range(len(str1)+1)]
for i in range(len(str1)):
for j in range(len(str2)):
if str1[i]==str2[j]:
record[i+1][j+1]=record[i][j]+1
if record[i+1][j+1]>maxStr:
maxStr=record[i+1][j+1]
p=i+1
return record[i+1][j+1],str1[p-maxStr:p]
print(func("hello","elallo"))
#运行结果
(3, 'llo')