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

 

posted on 2018-02-15 00:13  海燕。  阅读(85)  评论(0)    收藏  举报