Python常见问题系列
Python基础题
1、冒泡排序
def mao_pao(li): for i in range(len(li)): for j in range(len(li)): if li[i] < li[j]: li[i],li[j] = li[j] ,li[i] import random li = list(range(10)) random.shuffle(li) print(li) mao_pao(li) print(li)
2、删除列表中的重复元素
方式一 li = [1,5,5,4,12,3,1,5] print(list(set(l))) 方式二 li = [1,5,5,4,12,3,1,5] def func(li): l = [] for i in li: if i not in l: l.append(i) return l print(func(li))
3、二分查找
方式一:递归版 li = [1,2,3,4,5,6,7,8,9,10] def erfen(li,aim ,start=0 ,end=len(li)-1): if start <= end: mid = (start+end)//2 if li[mid] >aim : #如果中间的值比目标值大,就从左边找 return erfen(li,aim,start,mid-1) elif li[mid]<aim : #从右边找 return erfen(li,aim,mid+1,end) else: return mid ret = erfen(li,10) print(ret) 方式二:循环版 li = [1,2,3,4,5,6,7,8,9,10] def erfen(li,aim,start=0,end=len(li)-1): while start <= end: mid = (start+end) //2 if li[mid] < aim: start = li[mid] +1 elif li[mid] >aim: end = li[mid] -1 else: return mid print(erfen(li,10))
4、写出下面代码的输出结果
def f(x,l=[]): for i in range(x): l.append(i*i) print(l) f(2) #[0,1] f(3,[3,2,1]) #[3,2,1,0 1 4] f(3) #[0,1,0,1,4]
5、实现字符串反转 输入str="string"输出'gnirts'
# 方式一 def str_reverse(str): return str[::-1] #从前到后步长为-1 print(str_reverse('string')) # 方式二 def str_reverse2(str): l = list(str) l.reverse() new_str = ''.join(l) return new_str print(str_reverse2('string'))
6、一行代码实现对列表a中的偶数位置的元素进行加3后求和
# 0 1 2 3 4 # 0 5 7 sums=sum(map(lambda x:x+3,list(range(5))[::2])) print(sums)
7、List=[-2,1,3,-6] ,如何实现以绝对值大小从小到大将list中内容排序
List=[-2,1,3,-6] List.sort(key=abs) #按照绝对值从小到大排序 print(List)
8、如果当前日期为20170130,要求写一个函数输出N天后的日期
import datetime data = '20170130' def func(n,data): date=datetime.datetime.strptime(data,'%Y%m%d') da=datetime.timedelta(n) return date+da print(func(2,data))
9、实现一段代码,功能是将这段代码打印出来
import os def print_code(): with open(os.path.join(os.getcwd(),__file__),'r',encoding='utf-8') as f: return f.read() print(print_code())
10、合并两个列表,并去重,组成一个新的列表
# 方式一 list1 = [1,2,3,5,8,4,2,6] list2 = [11,44,21,2,54,77] print(list(set(list1+list2))) #方式二 list1.extend(list2) print(list(set(list1))) #方式三 def list_union(list1,list2): for i in list2: list1.append(i) return list1 print(list(set(list_union(list1,list2))))
11、什么是lambda表达式?他有什么好处?另外Python在函数编程方面提供了些什么函数和语法?
答:lambda 表达式也就是匿名函数,一些简单的功能需要实现的时候可以用匿名函数,一行语句体搞定。 它语法简单,简化代码,不会产生命名冲突,污染命名空间。 Python提供了map,filter,reduce等函数方法,提供了装饰器,闭包等语法
12、详细说说tuple,list,dict的用法以及他们的特点
tuple:元组,不可变数据类型,访问效率高,适合存储一些常量数据,可以作为字典的键使用
list:列表,是可变数据类型,可以通过下标索引取值
dict:字典,是可变数据类型,存储方式为键值对的形式,可以通过相对应的键获取相对应的值。key支持多种数据类型
13、list 对象 alist [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}],按 alist 中元素的age 由大到小排序
alist = [{'name': 'a', 'age': 20}, {'name': 'b', 'age': 30}, {'name': 'c', 'age': 25}] alist.sort(key=lambda x:x['age'],reverse=True) print(alist)
14、将字符串:"k:1|k1:2|k2:3|k3:4",处理成 python 字典:{'k':'1', 'k1':'2', 'k2':'3','k3':'4' }
s = "k:1|k1:2|k2:3|k3:4" str_list = s.split('|') print(str_list) d = {} for i in str_list: key ,value = i.split(':') d[key] = value print(d)
15、斐波那契数列
def fib(n): if n<=2: return 1 else: return fib(n-1) + fib(n-2) print(fib(10))