「找工作」是不少人学习 Python 的目标,而为了找到一份好工作,刷面试题是必不可少的一步。
新手在谋求 Python 编程工作前,必须熟知 Python 的编程基础、数据结构等知识。实验楼整理了一份包含 100 道 Python 编程题目的面试题合集,覆盖了基本语法,数据结构,算法等多个方面,并附有答案,是你熟悉 Python 编程和面试刷题的必备宝典。
课程地址:https://www.shiyanlou.com/courses/1512
所有用户均可免费试学前 20 个挑战,高级会员可免费学习。100 个挑战持续补充更新中,每周开放 20 个题目。以下是前五道题目:
一、确定字符串是否包含唯一字符
题目介绍:
实现一个算法:识别一个字符串中,是否包含唯一的字符。
如果字符串中的字符都是唯一的,则返回
True
,如 '123'。如果字符串中的字符有重复,则返回
False
,如 '1223'。
考核点:
集合的用法:set()
解题思路:
看到这个题目,你的第一反应可能是:先把字符串中每个字符都拆分出来,放入一个列表,再统计列表中是否有数量为 1 的字符。但这么做不但费时,而且要循环多次,效率极低,有一个方法可以让你超过 99 % 的面试者:
还记得 Python 的 Set (集合) 概念吗?在集合中,所有的元素都是唯一的。你可以使用 set() 方法将字符串、列表等任何「可迭代对象」转换为集合,转换后会删除重复的元素,继而长度会发生变化。所以,我们只需要将字符串转换为集合,然后比较转换前后的长度即可,代码如下。
参考答案:
classUniqueChars(object):
def has_unique_chars(self, string):
ifstringisNone:
returnFalse
return len(set(string)) == len(string)
二、确定字符串是否是另一个的排列
题目介绍:
实现一个算法来识别一个字符串 str2 是否是另一个字符串 str1 的排列。排列的解释如下:
如果将 str1 的字符拆分开,重新排列后再拼接起来,能够得到 str2 ,那么就说字符串 str2 是字符串 str1 的排列。例如:123 是 321 的排列,abc 是 cba 的排列。
如果 str2 字符串是 str1 字符串的排列,则返回 True;反之则返回 False;
考核点:sorted()方法
解题思路:
一样是看起来复杂,但只需一行核心代码就能搞定的题目。在其他语言中,你可能要手动写一个排序算法,然后比较两个字符串排序后是否一样。但 Python 自带的 sorted() 方法,可以自动对所有可迭代的对象进行排序操作。
参考答案:
classPermutations(object):
def is_permutation(self, str1, str2):
if str1 isNoneor str2 isNone:
returnFalse
return sorted(str1) == sorted(str2)
附加知识点:
sort() 和 sorted() 的区别:sort() 应用在 list 列表中,而 sorted() 可以对所有可迭代的对象进行排序操作。
三、反转字符串中的字符
题目介绍:
实现一个算法来实现反转字符数组的功能。反转的要求如下:
将字符数组的字符进行反转,例如 ['b', ' ', 'a', 'r'] 变成 ['r', 'a', ' ', 'b']。
将字符数组替换为反转后的数组。
考核点:使用 a,b = b,a 交换变量
解题思路:
常规的解法是创建一个相同长度的新数组,然后把第一个数组中的元素,按倒序放入新数组中。
但更简单的方法是:利用 Python 交换变量的特性,不需要新建数组,直接在原数组里即可完成,代码如下。
参考答案:
classReverseString(object):
def reverse(self, chars):
if chars:
size = len(chars)
for i in range(size // 2):
chars[i], chars[size - 1- i] = \
chars[size - 1- i], chars[i]
return chars
四、Fizz Buzz 经典问题
题目介绍:
给定一个整数 num,从 1 到 num 按照下面的规则返回每个数:
如果这个数被 3 整除,返回 'Fizz'。
如果这个数被 5 整除,返回 'Buzz'。
如果这个数能同时被 3 和 5 整除,返回 'FizzBuzz'。
如果这个数既不能被 3 也不能被 5 整除,返回这个数字的字符串格式。
考核点:
Python 基础语法中的条件判断
解题思路:
有趣又比较简单的一道题,写一个循环即可。当数字被 3 整除时返回 'Fizz',被 5 整除,返回 'Buzz',同时被 3 和 5 整除,返回 'FizzBuzz'……代码如下。
参考答案:
classSolution(object):
def fizz_buzz(self, num):
if num isNone:
raiseTypeError('num cannot be None')
if num < 1:
raiseValueError('num cannot be less than one')
results = []
for i in range(1, num + 1):
if i % 3== 0and i % 5== 0:
results.append('FizzBuzz')
elif i % 3== 0:
results.append('Fizz')
elif i % 5== 0:
results.append('Buzz')
else:
results.append(str(i))
return results
五、实现链表类
题目介绍:
实现链表的插入,增加,查找,删除,查看长度和打印的方法。链表的介绍如下:
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
链表中每一个元素称为结点,链表由一系列结点组成,结点可以在运行时动态生成。
链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。
参考答案:
classNode(object):
def __init__(self, data, next=None):
self.next= next
self.data = data
def __str__(self):
returnself.data
classLinkedList(object):
def __init__(self, head=None):
self.head = head
def __len__(self):
curr = self.head
counter = 0
while curr isnotNone:
counter += 1
curr = curr.next
return counter
def insert_to_front(self, data):
if data isNone:
returnNone
node = Node(data, self.head)
self.head = node
return node
def append(self, data):
if data isNone:
returnNone
node = Node(data)
ifself.head isNone:
self.head = node
return node
curr_node = self.head
while curr_node.nextisnotNone:
curr_node = curr_node.next
curr_node.next= node
return node
def find(self, data):
if data isNone:
returnNone
curr_node = self.head
while curr_node isnotNone:
if curr_node.data == data:
return curr_node
curr_node = curr_node.next
returnNone
defdelete(self, data):
if data isNone:
return
ifself.head isNone:
return
ifself.head.data == data:
self.head = self.head.next
return
prev_node = self.head
curr_node = self.head.next
while curr_node isnotNone:
if curr_node.data == data:
prev_node.next= curr_node.next
return
prev_node = curr_node
curr_node = curr_node.next
def print_list(self):
curr_node = self.head
while curr_node isnotNone:
print(curr_node.data)
curr_node = curr_node.next
def get_all_data(self):
data = []
curr_node = self.head
while curr_node isnotNone:
data.append(curr_node.data)
curr_node = curr_node.next
return data
篇幅有限,今天就介绍到这里~
???????????? 点击阅读原文,挑战 100 道 Python 题目