1、如何实现对Python列表去重并保持原先顺序?
#由于集合是无序的,所以不能用强转的形式 li = [1,2,5,1,2,3,4,5,9,7,8,2,5] new_li = [] for i in li: if i in new_li: pass else: new_li.append(i) print(new_li)
2、现有两元组(('a'),('b')),(('c'),('d')),请使用Python中的匿名表达式生成列表[{'a':'c'},{'b':'d'}]
t1 = (('a'),('b')) t2 = (('c'),('d')) #方式一不用lambda实现的 # li = [] # li.append(dict(zip(t1,t2))) # print(li) 方式二 print(list(map(lambda t:{t[0]:t[1]},zip(t1,t2))))
3、请给出二分查找的Python示例代码
#方式一:利用循环来实现的二分查找 li = [1,10,20,30,50,11,20,55,226,44,80,92,14] def binary_search(li,findnum): start = 0 end = len(li)-1 while start<=end: mid = (start+end)//2 if findnum not in li: return '没有找到' elif findnum ==li[mid]: return '找到了,索引为:%s'%mid elif findnum < li[mid]: end = mid-1 elif findnum > li[mid]: start = mid+1 return False print(binary_search(li,14)) # 方式二:利用递归实现的二分查找 l = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88] def func(l, aim,start = 0,end = len(l)-1): mid = (start+end)//2#求中间的数 if not l[start:end+1]:#如果你要找的数不在里面,就return'你查找的数字不在这个列表里面' return '你查找的数字不在这个列表里面' elif aim > l[mid]: return func(l,aim,mid+1,end) elif aim < l[mid]: return func(l,aim,start,mid-1) elif aim == l[mid]: print("bingo") return mid index = func(l,88) print(index) # print(func(l,41)) #方式三:利用递归实现的二分查找 li = [2, 3, 5, 10, 15, 16, 18, 22, 26, 30, 32, 35, 41, 42, 43, 55, 56, 66, 67, 69, 72, 76, 82, 83, 88] def binary_search(li,findnum,start=0,end=len(li)-1): if start<=end: mid = (start+end)//2 if findnum < li[mid]: return binary_search(li,findnum,start,mid-1) elif findnum >li[mid]: return binary_search(li,findnum,mid+1,end) else: return mid else: return '找不到' ret = binary_search(li,88) print(ret)
4、在Python字符串格式化中,%和.format的主要区别是什么?
%和format都是用来格式化字符串的,从大的角度来说两者没有什么较大的区别,用% 能实现的格式化操作用format同样也可以完成。从小的方面来说format更加灵活 比如: format:是用str.format()函数用{}代替了% s1 = "I am {0} {1} {2}".format('zhang','hai','yan') print(s1) #打印结果:I am zhang hai yan s2 = "I am {0} {1} {0}".format('zhang','hai','yan') print(s2) #打印结果是:I am zhang hai zhang s3 = 'I am {} {} {}'.format('xu','xiao','jie') print(s3) #打印结果:I am xu xiao jie s4 = 'I am {name1} {name2} {name3}'.format(name1='yu',name2='sss',name3='xxx') print(s4) #打印结果:I am yu sss xxx
5、*args和**kwargs在什么情况下会使用到?请给出用**kwargs的代码示例
*args和**kwargs称之为可变长参数,当函数需要传太多的值的时候可以用他们代替。 按照位置传参数冗余的部分,会被形参中的*保存成元组的形式赋值给args。 按照关键字传参数冗余的部分,会被形参中的**保存成字典的形式赋值给kwargs。 def aaa(x,*args,**kwargs): print(args) #(6, 7) print(kwargs) #{'name': 'haiyan'} return x*x xx = aaa(5,6,7,name='haiyan') print(xx)
6、Python里面如何实现tuple和list的转换
In [1]: li=[1,2,3] In [2]: tuple(li) Out[2]: (1, 2, 3) In [3]: tp = (4,5,6) In [4]: list(tp) Out[4]: [4, 5, 6]
7、请写出一段Python代码实现删除一个list里面的重复元素
#方式一 li =[1,2,3,4,4,4,2,3,1,5,8] new_li = [] for i in li: if i not in new_li: new_li.append(i) print(new_li) #方式二 print(list(set(li)))
8、如何得到列表list的交集和差集
python = {'alex','wuser','xiaohua','haiyan','xxx'}
linux = {'alex','wuser','xinxi','haiyan','wuyu'}
print(python-linux) #差集 print(python.difference(linux)) #差集
print(python|linux) #并集 print(python.union(linux))
print(python^linux) #对称差集 print(python.symmetric_difference(linux))
print(python&linux) #交集 print(python.intersection(linux))
9、Python2 和Python3 有哪些显著的区别?
Python2中的字符串有两种类型str和unicode,Python2中的字符串是以字节的形式表现的
Python3中的字符串有两种类型bytes和str,Python3中的字符串是以字符的形式表现的
10、请描述unicode、utf-8、gbk等编码之间的关系?
unicode------>encode(编码)-------->utf-8
utf-8---------->decode--------->unicode
浙公网安备 33010602011771号