python面试题汇总(史上最全),已拿到offer

题15:请写出匹配中国大陆手机号且结尾不是4和7的正则表达式。

难度:★☆☆☆☆ 【参考答案】

import re

tels = [“159********”, “14456781234”, “12345678987”, “11444777”] for tel in tels:

print(“Valid”) if (re.match(r"1\d{9}[0-3,5-6,8-9]", tel) != None) else print(“Invalid”)

题16:请写出以下代码的运行结果。

难度:★★☆☆☆

import re

str = ‘

中国

res = re.findall(r’

(.*?)
',str) print(res)

结果如下: 【参考答案】

['中国 ']

题17:请写出以下代码的运行结果。

难度:★★★☆☆

import re

match = re.compile(‘www…?’).match(“www.baidu.com”) if match:

print(match.group()) else:

print(“NO MATCH”)

【参考答案】

www.bai

题18:请写出以下代码的运行结果。

难度:★★☆☆☆

import re

example = “

test1
test2
” Result = re.compile(“
.*”).search(example)

print(“Result = %s” % Result.group())

【参考答案】

Result =

test1

test2

四、 列表、字典、元组、数组、矩阵(9题)

题19:使用递推式将矩阵转换为一维向量。

难度:★☆☆☆☆ 使用递推式将 [[ 1, 2 ], [ 3, 4 ], [ 5, 6 ]]

转换为

[1, 2, 3, 4, 5, 6]。 【参考答案】

a = [[1, 2], [3, 4], [5, 6]] print([j for i in a for j in i])

题20:写出以下代码的运行结果。

难度:★★★★☆

def testFun():

temp = [lambda x : i*x for i in range(5)]

return temp

for everyLambda in testFun(): print (everyLambda(3))

结果如下: 【参考答案】

12 12 12 12 12

题21:编写Python程序,打印星号金字塔。

难度:★★★☆☆

编写尽量短的Python程序,实现打印星号金字塔。例如n=5时输出以下金字塔图形:


参考代码如下: 【参考答案】

n = 5

for i in range(1,n+1):

print(’ ‘(n-(i-1))+'(2i-1))

题22:获取数组的支配点。

难度:★★★☆☆

支配数是指数组中某个元素出现的次数大于数组元素总数的一半时就成为支配数,其所在下标称为支配点。编写Python

函数FindPivot(li),输入数组,输出其中的支配点和支配数,若数组中不存在支配数,输出None。

例如:[3,3,1,2,2,1,2,2,4,2,2,1,2,3,2,2,2,2,2,4,1,3,3]中共有23个元素,其中元素2出现了12次,其支配点和支配数组合是(18, 2)。 【参考答案】

def FindPivot(li): mid = len(li)/2 for l in li: count = 0 i = 0 mark = 0 while True: if l == li[i]: count += 1 temp = i i += 1

if count > mid: mark = temp

return (mark, li[mark]) if i > len(li) - 1: break

题23:将函数按照执行效率高低排序

难度:★★★☆☆

有如下三个函数,请将它们按照执行效率高低排序。

def S1(L_in):

l1 = sorted(L_in)

l2 = [i for i in l1 if i<0.5] return [i*i for i in l2]

def S2(L_in):

l1 = [i for i in L_in if i<0.5] l2 = sorted(l1)

return [i*i for i in l2]

def S3(L_in):

l1 = [i*i for i in L_in] l2 = sorted(l1)

return [i for i in l2 if i<(0.5*0.5)]

【参考答案】

使用cProfile库即可测试三个函数的执行效率:

import random import cProfile

L_in = [random.random() for i in range(1000000)]

cProfile.run(‘S1(L_in)’) cProfile.run(‘S2(L_in)’) cProfile.run(‘S3(L_in)’)

从结果可知,执行效率从高到低依次是S2、S1、S3。

题24:螺旋式返回矩阵的元素

难度:★★★★★

给定m×n个元素的矩阵(m行,n列),编写Python

函数spiralOrder(matrix),以螺旋顺序返回矩阵的所有元素。

例如,给定以下矩阵: [[ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ]]

应该返回[1,2,3,6,9,8,7,4,5]

【参考答案】

def spiralOrder(matrix):

if len(matrix) == 0 or len(matrix[0]) == 0: return [] ans = []

left, up, down, right = 0, 0, len(matrix) - 1, len(matrix[0]) - 1 while left <= right and up <= down: for i in range(left, right + 1): ans += matrix[up][i], up += 1

for i in range(up, down + 1): ans += matrix[i][right], right -= 1

for i in reversed(range(left, right + 1)): ans += matrix[down][i], down -= 1

for i in reversed(range(up, down + 1)): ans += matrix[i][left], left += 1

return ans[:(len(matrix) * len(matrix[0]))]

题25:矩阵重整

难度:★★★★☆

对于一个给定的二维数组表示的矩阵,以及两个正整数r和c,分别表示所需重新整形矩阵的行数和列数。reshape函数生成一个新的矩阵,并且将原矩阵的所有元素以与原矩阵相同的行遍历顺序填充进去,将该矩阵重新整形为一个不同大小的矩阵但保留其原始数据。对于给定矩阵和参数的reshape操作是可以完成且合法的,则输出新的矩阵;否则,输出原始矩阵。请使用Python语言实现reshape函数。 例如:

输入

r, c 输出

说明

nums = [[1,2], [3,4]] r = 1,c =

4 [[1,2,3,4]]

行遍历的是[1,2,3,4]。新的重新形状矩阵是1 * 4矩阵,使用前面的列表逐行填充。

nums = [[1,2], [3,4]]

r = 2,c =

4

[[1,2], [3,4]]

无法将2 * 2矩阵重新整形为2 * 4矩阵。所以输出原始矩阵。

注意:给定矩阵的高度和宽度在[1,100]范围内。给定的r和c都是正数。

【参考答案】

def matrixReshape(nums, r, c): “”"

if r * c != len(nums) * len(nums[0]): return nums m = len(nums) n = len(nums[0])

ans = [[0] * c for _ in range®] for i in range(r * c):

ans[i / c][i % c] = nums[i / n][i % n] return ans

题26:查找矩阵中第k个最小元素。

难度:★★★★☆

给定n×n矩阵,其中每行每列元素均按升序排列,试编写Python函数kthSmallest(matrix, k),找到矩阵中的第k个最小元素。

注意:查找的是排序顺序中的第k个最小元素,而不是第k个不同元素。 例如: 矩阵= [[1,5,9], [10,11,13], [12,13,15]] k = 8,应返回13。

【参考答案】

import heapq

def kthSmallest(matrix, k): visited = {(0, 0)}

heap = [(matrix[0][0], (0, 0))]

while heap:

val, (i, j) = heapq.heappop(heap) k -= 1 if k == 0: return val

if i + 1 < len(matrix) and (i + 1, j) not in visited:

heapq.heappush(heap, (matrix[i + 1][j], (i + 1, j))) visited.add((i + 1, j))

if j + 1 < len(matrix) and (i, j + 1) not in visited: heapq.heappush(heap, (matrix[i][j + 1], (i, j + 1))) visited.add((i, j + 1))

题27:试编写函数largestRectangleArea(),求一幅柱状图中包含的最大矩

  • 21
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值