2019年夏天,我从北京来到了成都,工作并不好找,面试了两个月,干货都在这里了。

必考面试题

  1. 🌟如何去除列表中的重复元素
  2. 🌟八大排序算法合集
  3. 🌟斐波那契数列的python实现
  4. 🌟如何对字符串进行反转
  5. 如何对单词反转
  6. 统计字符串中每个字母出现的次数
  7. 对某英文文章的单词,进行词数统计
  8. python的字典合并
  9. python的赋值、浅拷贝和深拷贝的区别
  10. 🌟返回字符串中第一个不重复的字母和位置

经常会问到的面试题

  1. 如何不通过循环,输出1到100
  2. 两个列表如何生成一个对应的字典
  3. 字典排序
  4. 判断一个字符串中的括号是不是成对出现的
  5. 一行代码实现字典的key和value反转
  6. python如何实现单例模式
  7. 为什么模块称为天然的单例模式?
  8. Python处理排列组合
  9. 将某个数字列表中的元素拼成一个最大的数

偶尔会问到的面试题

  1. 丑数计算?
  2. 如何快速找到多个字典的公共键?
  3. python的socket编程
  4. 求一个数字列表里,相邻两数乘积最高的值,及这两个数分别是多少?
  5. 如何求字符串的最长回文子串?

精讲5题

1、如何去除列表中的重复元素 【热度:⭐️⭐️⭐️⭐️⭐️】

【题目】给出一个列表:lis = [4, 2, 1, 3, 4, 2, 3, 1, 3, 2, 2, 2],去除列表中的重复元素。

​​​​​​​lis = [4, 2, 1, 3, 4, 2, 3, 1, 3, 2, 2, 2] 

# 解法1: 利用set去重,会改变列表顺序
lis1 = list(set(lis)) 

# 解法2:
lis2 = []
for i in lis:
     if i not in lis2:
         lis2.append(i)

2、八大排序算法合集 – 冒泡排序 【热度:⭐️⭐️⭐️⭐️⭐️】

def bubble_sort(lists):
''' 冒泡排序(升序)【稳定排序】 原理: 1、从第一个元素开始,开始依次对相邻的两个元素进行比较,当后面的元素大于前面的元素时,交换二者位置; 2、进行一轮比较之后,最大的元素将在序列尾部(最后一位); 3、然后对(n-1)个元素再进行第二轮比较,最大元素将在序列倒数第二位; 4、重复该过程,直至只剩下最后一个元素为止,最后的元素就是最小值,排在序列首位 以 list = [5, 4, 2, 1, 3] 为例: 第一轮排序: [4, 2, 1, 3, 5] 第二轮排序: [2, 1, 3, 4, 5] 第三轮排序: [1, 2, 3, 4, 5] 时间复杂度:O(n) ~ O(n**2) 平均:O(n**2) 空间复杂度:O(1) :param lists: :return lists: '''
    for i in range(len(lists)-1):
        for j in range(len(lists)-i-1):
            if lists[j] > lists[j+1]:
                lists[j], lists[j+1] = lists[j+1], lists[j]
    return lists
    
# 调用冒泡排序
bubble_sort_list = bubble_sort(lis)
print(bubble_sort_list)

3、斐波那契数列的python实现 【热度:⭐️⭐️⭐️⭐️⭐️】

【题目】 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、…… 基于python用多种方式,生成费波拉契数列。

# (1)递归法 返回 idx 位的数值,缺点:只能返回某个值
def fib_recursion(idx):
    if idx <= 2:
        return 1
    else:
        return fib_recursion(idx-1) + fib_recursion(idx-2)

# (2)迭代法 返回 idx 位之前的fib数列
def fib_iteration(idx):
    lst = []
    n,a,b = 0,0,1
    while n < idx:
        lst.append(b)
        a,b = b, a+b
        n += 1
    return lst

# (3)生成器法
def fib_generator(idx):
    n,a,b = 0,0,1
    while n < idx:
        yield b
        a,b = b, a+b
        n += 1

if __name__ == '__main__':
    idx = 6
    numb = fib_recursion(idx)
    print(numb)

    lst = fib_iteration(idx)
    print(lst)

    lst1 = fib_generator(idx)
    print(list(lst1))

4、如何对字符串进行反转 【热度:⭐️⭐️⭐️⭐️⭐️】

【题目】要求不使用任何系统方法,且时间复杂度最小

def reverse_str(input_str):
    ch=list(input_str)
    lens=len(ch)
    i=0
    j=lens-1
    while i < j:
        tmp= ch[i]
        ch[i] =ch[j]
        ch[j]=tmp
        i+=1
        j-=1
    return ''.join(ch)

#tips 假如可以使用系统方法,如何实现?
new_str = old_str[::-1]

5、返回字符串中第一个不重复的字母和位置 【热度:⭐️⭐️⭐️⭐️⭐️】

def first_char(str):
    d = {}
    for i in range(len(str)):
        # 累计字符的出现次数
        if str[i] in d:
            d[str[i]] += 1
        # 只出现一次,key对应的value就记1次
        else:
            d[str[i]] = 1
    for i in range(len(str)):
        if d[str[i]] == 1:
            return '第一个不重复的字符串是{},索引是{}'.format(str[i], i)

    return "没有不重复的字符串"


if __name__ == '__main__':
    s = "wwqqoogg"
    res = first_char(s)
    print(res)

关于作者

github:https://github.com/GitDzreal93/dev-tester
微信公众号:测试开发guide