Python相关面试题总结(一)

1.如何实现对python列表去重并保持原先顺序?

l1 = [1, 4, 3, 3, 4, 2, 3, 4, 5, 6, 1]
a = list(set(l1))
a.sort(key=l1.index)
print(a)
#  a.sort(key=l1.index) 执行返回值为None,不要直接list(set(l1)).sort(key=l1.index)

2.现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]

t1 = (('a'),('b'))
t2 = (('c'),('d'))
print(list(zip(t1,t2))
print(list(map(lambda t:{t[0],t[1]},zip(t1,t2))))

data = (('a'), ('b'), ('c'), ('d'))
print(data[0:2])  # (a,b)  ==  (('a'),('b'))
print(data[2:4])  # (c,d)
v = list(map(lambda x, y: {x: y}, data[0:2], data[2:4]))
print(v)  # [{'a': 'c'}, {'b': 'd'}]
# 主要了解map 匿名函数两个参数计算
f = lambda x, y: {x: y}
v1 = list(map(f, ('a', 'b'), ('c', 'd')))  # [{'a': 'c'}, {'b': 'd'}]

print(v1)
print(('a'))
print(type('a'))  # 注意括号直接加字符串和数字,不加逗号相当于啥都没加

3.请给出二分查找的python示例代码。
迭代

l = [2, 3, 5, 10, 15, 16, 18, 22, 26]


def find2(l, ans, start=0, end=None):
    if not end:
        end = len(l) - 1
    mid = (start + end) // 2
    if start <= end:
        if ans > l[mid]:
            start = mid + 1
            return find2(l, ans, start, end)
        elif ans < l[mid]:
            end = mid - 1
            return find2(l, ans, start, end)
        else:
            return mid
    else:
        return '找不到'

print(find2(l, 5))

非迭代


def binary_search(l, val):
    start = 0
    end = len(l) - 1
    while start <= end:
        mid = (start + end) // 2
        if l[mid] < val:
            start = mid + 1
        elif l[mid] > val:
            end = mid - 1
        else:
            return mid
    else:
        return '找不到'

4.在python字符串格式化中,% 和 .format的主要区别是什么?
python 内置的占位符%,字符串中有多少占位符就有,就需要多少变量来填充
.format是字符串的内置方法字符串中可以通过{},{0},{name}来填充数值,具体数据是有format函数的参数来确定

  1. *args**kwargs在什么情况下会使用到?请给出使用kwargs的示例代码
    当你不确定你的函数里将要传递多少参数时你可以用
    args
    相似的,
    *kwargs允许你使用没有事先定义的参数名:
常见使用情况是装饰器或者以下情况
class Foo(object):
    def __init__(self, value1, value2):
        # do something with the values
        print value1, value2

class MyFoo(Foo):
    def __init__(self, *args, **kwargs):
        # do something else, don't care about the args
        print 'myfoo'
        super(MyFoo, self).__init__(*args, **kwargs)

还有如下方法,如果下面的`__new__`方法没有写入(*args,**kwargs)
则执行实例化时候回报错

class Bar(object):
    """
    有参数__init__类
    """

    def __init__(self, name):
        self.name = name

    def __new__(cls, *args, **kwargs):
        obj = object.__new__(cls)
        print(obj)
        return obj
b = Bar('hello')

6.选择题

x = "foo"
y = 2
print(x*y)
执行结果:  foofoo

7.问答题

kvps = {'1':1,'2':2}
theCopy = kvps
kvps['1'] = 5
sum = kvps['1'] + theCopy['1']
print(sum)
10
  1. 选择题 c
sys.path.append('/root/mods')    
A.改变python的启动路径
B.改变python目前的工作路径
C.添加一个新的python模块的搜素路径
D.从mods中移除所有文件夹
print(sys.path)
[
'', 
'/Users/BUYI/anaconda3/lib/python36.zip', 
'/Users/BUYI/anaconda3/lib/python3.6', 
'/Users/BUYI/anaconda3/lib/python3.6/lib-dynload', 
'/Users/BUYI/anaconda3/lib/python3.6/site-packages', 
'/Users/BUYI/anaconda3/lib/python3.6/site-packages/aeosa'
]
  1. 选择题
country_counter = {}
def addone(country):
    if country in country_counter:
        country_counter[country] += 1
    else:
        country_counter[country] = 1
addone('China')
addone('Japan')
addone('china')
print(len(country_counter)) # 3
{'China': 1, 'Japan': 1, 'china': 1}

10.选择题 (B)
重点关注切片和浅拷贝的区别

names1 = ['Amir','Barry','Chales','Dao']
names2 = names1
names3 = names1[:]
names2[0] = 'Alice'
names3[1] = 'Bob'
sum = 0
for ls in (names1,names2,names3):
    if ls[0] == 'Alice':
        sum += 1
    if ls[1] == 'Bob':
        sum += 10
print(sum)
 A.11  B.12  C.21  D.22   E.33

11.填空题 (24)

d = lambda p : p * 2
t = lambda p : p * 3
x = 2
x = d(x)
x = t(x)
x = d(x)
print(x)

12.填空题(yes)

x = True
y = False
z = False
if x or y and z:
    print('yes')
else:
    print('no')
其一, 在不加括号时候, and优先级大于or
其二, x or y 的值只可能是x或y.  x为真就是x, x为假就是y(切记如果x为真,后面的就不计算了)
第三, x and y 的值只可能是x或y.  x为真就是y, x为假就是x(如果x为假,后面的也不计算了)

13.Python里面如何实现tuple和list的转换
list
tuple()

14.请写出一段Python代码实现删除一个list里面的重复元素

a = [1, 2, 4, 2, 4, 5, 6, 5, 7, 8, 9, 0]
b = {}.fromkeys(a)
print(b)
print(b.keys())
a = list(b.keys())
print(a)

15.如何得到列表list的交集与差集

a = [2, 5, 8]
b = [3, 4, 5]
print(set(a) & set(b))  # {5}
print(set(a).intersection(set(b)))  # {5}

print(set(a) | set(b))  # {2, 3, 4, 5, 8}
print(set(a).union(set(b)))  # {2, 3, 4, 5, 8}

print(set(a) - set(b))  # {8, 2}
print(set(a).difference(set(b)))  # {8, 2}

print(set(a) ^ set(b))  # {2, 3, 4, 8}
print(set(a).symmetric_difference(set(b)))  # {2, 3, 4, 8}
集合操作

16.以下的代码的输出将是什么:(自己手写一下)

def extendList(val,list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')
print('list1 = %s'%list1)
print('list2 = %s'%list2)
print('list3 = %s'%list3)

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
  1. python中定义函数是如何书写可变参数和关键字参数?
    *args**kwargs

18.什么是lambda表达式?
编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数,因此也不用担心函数名冲突。
匿名函数主要是指对某数据的一个处理过程,但是不需要一个变量去承载他.
推荐知乎
19.re.match 和search 有什么区别
*re.match(pattern, string[, flags]) *

从首字母开始开始匹配,string如果包含pattern子串,则匹配成功,返回Match对象,失败则返回None,若要完全匹配,pattern要以$结尾。
ret = re.match('a', 'abc').group()  # 同search,不过尽在字符串开始处进行匹配
print(ret)  #结果 : 'a'

re.search(pattern, string[, flags])

若string中包含pattern子串,则返回Match对象,否则返回None,
注意,如果string中存在多个pattern子串,只返回第一个。
ret = re.search('a', 'eva egon yuan').group()
print(ret) #结果 : 'a'
 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

re.findall(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为数组
ret = re.findall('a', 'eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里
print(ret) #结果 : ['a', 'a']

re.finditer(pattern, string[, flags])

返回string中所有与pattern相匹配的全部字串,返回形式为迭代器。
import re
ret = re.finditer('\d', 'ds3sy4784a')   #finditer返回一个存放匹配结果的迭代器
print(ret)  # <callable_iterator object at 0x10195f940>
print(next(ret).group())  #查看第一个结果
print(next(ret).group())  #查看第二个结果
print([i.group() for i in ret])  #查看剩余的左右结果
  1. 1 or 2 和 1 and 2输出分别是什么?为什么?
1 or 2 ---->1 # 1为True,or运算符直接结束运算,返回1
1 and 2 ---->2  # 1 为True,and运算符需要继续运算,返回值为and后的值(2)

and or 详见

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 两本不错的书: 《Python参考手册》:对Python各个标准模块,特性介绍的比较详细。 《Python核心编程...
    静熙老师哈哈哈阅读 3,389评论 0 80
  • http://python.jobbole.com/85231/ 关于专业技能写完项目接着写写一名3年工作经验的J...
    燕京博士阅读 7,632评论 1 118
  • 套接字编程:1、 函数的功能基本和c类似,唯一不同的地方在于当发生错误时,它不是通过返回值来告知的,而是通过触发异...
    静熙老师哈哈哈阅读 667评论 0 11
  • 风烛尘香花已殆,日夜戏蓬头。 物是人非事宜休,欲语拭泪流。 衣染红樟浓似酒,珠扣两排袖。 千门锁尽相思瘦,两恨两清...
    东方轩洛阅读 341评论 0 5
  • 社群是肆拾玖坊发展的根基,也是肆拾玖坊纵横江湖的独门秘籍。玉泉分舵开宗立派刚一个月,户外潮牛是我们玉泉分舵正在筹备...
    罗大奋阅读 498评论 0 0