测试面试--python基础编程题

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')
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值