python面试题
第一章:python基础
数据类型:
字典
1.1 现有字典 dic = {'a': 24, 'g': 52, 'i': 12, 'k': 33} 请按字典中的 value 值进行排序?
dic = {'a': 24, 'g': 52, 'i': 12, 'k': 33}
a = sorted(dic.items(), key=lambda x: x[1])
1.2 说一下字典和json的区别?
字典和json样式十分相似,字典是一种数据结构,json是一种数据的表现形式(格式),字典的key值只要是能hash的就行,json的必须是字符串
字典可以用单引号,而在json中得用双引号,所以如果想将一个字典以json格式传递时,记得将单引号都替换成双引号
1.3 什么是可变、不可变类型?
可变不可变指的是内存中的值是否可以被改变,
不可变类型指的是对象所在内存块里面的值不可以改变,有数值、字符串、元组;
可变类型则是可以改变,主要有列表、字典。
1.4 存入字典里的数据有没有先后排序?
存入的数据不会自动排序,可以使用sort函数对字典进行排序。
1.5 字典推导式?
dict = {key: value for (key, value) in iterable}
1.6 现有字典 d = {'a': 24, 'g': 52, 'I': 12, 'k': 33 }请按字 典中的 value 值进行排序?
d = {'a': 24, 'g': 52, 'I': 12, 'k': 33}
a = sorted(d.items(), key=lambda x: x[1]))
企业面试题
1. 如何对一遍文章进行敏感词替换, 加入有1000个敏感词
sensitive.txt
文件结构
渣男|心机婊|好色
import re
def read_txt(file_name):
# 读取txt文件
with open(file_name, 'r') as file_to_read:
lines = list()
# 打开文件, 一次读一行
for line in file_to_read.readlines():
if line is not None:
# 符合条件的存入列表
lines.append(line.strip('\n'))
return lines
def sensitive_words(file_name):
with open(file_name, 'r', encoding='utf-8') as f:
ls = f.read().split('|')
return ls
def shield_sensitive_word(file_name, sensitive_name):
# 屏蔽敏感词
articles = read_txt(file_name)
sensitive_word = sensitive_words(sensitive_name)
with open('2.txt', 'wt', encoding='utf-8') as f:
for pattern in articles:
a = pattern
for i in sensitive_word:
match = re.search(i, pattern)
if match:
a = re.sub(i, '*', pattern)
# a = pattern.replace(i, '***')
print('有敏感词汇{}'.format(i))
f.write('%s%s' % (a, '\n'))
if __name__ == "__main__":
shield_sensitive_word('1.txt', 'sensitive.txt')
2. 以下代码输出结果
from operator import attrgetter
from itertools import groupby
class Student:
def __init__(self, id, name):
self.id = id
self.name = name
def __repr__(self):
return repr((self.name, self.id))
data_list = [Student(1, 'xiao'), Student(3, 'xiaoming'), Student(4, 'xiaohu'), Student(6, 'xiaohua')]
print(data_list) # [('xiao', 1), ('xiaoming', 3), ('xiaohu', 4), ('xiaohua', 6)]
data_list.sort(key=attrgetter('id', 'name')) # 对data_list的元素根据id和name进行排序
print(data_list)
data_group_list = [list(k) for g, k in groupby(data_list, key=lambda x:x.id)]
print(data_group_list)
输出结果
[[('xiao', 1)], [('xiaoming', 3)], [('xiaohu', 4)], [('xiaohua', 6)]]