4

100道Python常见面试题

 2 years ago
source link: https://zhuanlan.zhihu.com/p/412972993
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

100道Python常见面试题

公号:Python大数据分析,关注进学习群

Python现在已经成为最热门的编程语言之一,IEEE Spectrum统计数据显示,Python无论从普及度和生态规模都已位居编程语言第一,而且相关职位也越来越多,无论数据岗、测试岗亦或开发岗都对Python技能有着高度的需求。

v2-4c5682a6c1e81a262f33c72c81d1e162_720w.jpg

从求职来看,无论笔试还是面试,想要顺利通过,刷题都是最好的路径,python岗位更是如此。

之前在github上看到一个项目,作者收集了接近100个常见的Python面试题,涉及语言特性、操作系统、数据库、web、数据结构等等,非常详细。

部分面试题清单:

v2-28b9ec0df4bf9b3e8d78df12b02057d3_720w.jpg

Github地址:https://github.com/taizilongxu/interview_python

如果Github比较慢,我下载好了PDF版,大家可以去下载看

100道Python常见面试题,PDF打包下载

下面是部分面试题:

1、台阶问题/斐波那契

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

fib = lambda n: n if n <= 2 else fib(n - 1) + fib(n - 2)

第二种记忆方法

def memo(func):
    cache = {}
    def wrap(*args):
        if args not in cache:
            cache[args] = func(*args)
        return cache[args]
    return wrap 


@memo
def fib(i):
    if i < 2:
        return 1
    return fib(i-1) + fib(i-2)

第三种方法

def fib(n):
    a, b = 0, 1
    for _ in xrange(n):
        a, b = b, a + b
    return b

2、变态台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

fib = lambda n: n if n < 2 else 2 * fib(n - 1)

3、矩形覆盖

我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?

2*n个矩形的覆盖方法等于第2*(n-1)加上第2*(n-2)的方法。

f = lambda n: 1 if n < 2 else f(n - 1) + f(n - 2)

4、杨氏矩阵查找

在一个m行n列二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

使用Step-wise线性搜索。

def get_value(l, r, c):
    return l[r][c]

def find(l, x):
    m = len(l) - 1
    n = len(l[0]) - 1
    r = 0
    c = n
    while c >= 0 and r <= m:
        value = get_value(l, r, c)
        if value == x:
            return True
        elif value > x:
            c = c - 1
        elif value < x:
            r = r + 1
    return False

5、去除列表中的重复元素

list(set(l))
l1 = ['b','c','d','b','c','a','a']
l2 = {}.fromkeys(l1).keys()
print l2

用字典并保持顺序

l1 = ['b','c','d','b','c','a','a']
l2 = list(set(l1))
l2.sort(key=l1.index)
print l2

列表推导式

l1 = ['b','c','d','b','c','a','a']
l2 = []
[l2.append(i) for i in l1 if not i in l2]

sorted排序并且用列表推导式.

l = ['b','c','d','b','c','a','a']
[single.append(i) for i in sorted(l) if i not in single]
print single

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK