Python 面试题篇2

Python 面试题篇2

Python 面试题篇2

列出python中可变数据类型和不可变数据类型,并简述原理

不可变数据类型:数值型、字符串型string和元组tuple
可变数据类型:列表list和字典dict;

提示:

这里所说的可变与不可变是说的内存层面的性质,不可变就是需要在内存上新申请空间。

不允许变量的值发生变化,如果改变了变量的值,相当于是新建了一个对象,而对于相同的值的对象,在内存中则只有一个对象(一个地址),可以使用id(变量名)的方法可以打印对象的id

允许变量的值发生变化,即如果对变量进行append、+=等这种操作后,只是改变了变量的值,而不会新建一个对象,变量引用的对象的地址也不会变化,不过对于相同的值的不同对象,在内存中则会存在不同的对象,即每个对象都有自己的地址,相当于内存中对于同值的对象保存了多份,这里不存在引用计数,是实实在在的对象。

s = "ajldjlajfdljfddd",去重并从小到大排序输出"adfjl"

方法:set去重,去重转成list,利用sort方法排序,reeverse=False是从小到大排

代码:

s = "ajldjlajfdljfddd"
s = set(s)
s = list(s)
s.sort()
s = "".join(s)
print(s)
#adfjl

提示:sort方法会直接修改原列表,所以说没有返回值
"".join() 用于把字符串用指定的符号链接起来,返回字符串格式

用lambda函数实现两个数相乘

代码:

multiply = lambda a,b:a*b
print(multiply(2,4))

提示:

lambda是指一类无需定义标识符(函数名)的函数或子程序。比如这样简单的方法就可以写成 lambda表达式的样子

def sum(x,y):
    return x+y
sum = lambda x,y:x+y
print(sum(1,2))

字典根据键从小到大排序

方法:用sort 对字典的key 排序然后输出

代码:

dicta ={"name":"zs","age":18,"city":"深圳","tel":"1362626627"}
keylist = sorted(list(dicta.keys()),reverse=False)
new_dict = {}
for i in keylist:
    new_dict[i]=dicta[i]
print(new_dict)
#{'age': 18, 'city': '深圳', 'name': 'zs', 'tel': '1362626627'}

提示:

在 Python2 中字典是无序的,但Python3.6后字典是有序的,字典的无序是指数据存进字典的顺序跟取出字典的顺序不一致。问题要求从大到小排序,所以说和字典本身有序无序无关

利用collections库的Counter方法统计字符串每个单词出现的次数"kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"

方法:用Counter()统计

代码:

from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
print(Counter(a))
#Counter({'l': 9, ';': 6, 'h': 6, 'f': 5, 'a': 4, 'j': 3, 'd': 3, 's': 2, 'k': 1, 'g': 1, 'b': 1})

列表推导式求列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

代码:

a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newlist = [i for i in a if i%2 ==1]
print(newlist)
#[1, 3, 5, 7, 9]

提示:
是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体

variable = [out_exp_res for out_exp in input_list if out_exp == 2]

  • out_exp_res:列表生成元素表达式,可以是有返回值的函数。
  • for out_exp in input_list:迭代input_list将out_exp传入out_exp_res表达式中。
  • if out_exp == 2:根据条件过滤哪些值可以。

filter方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

代码:

a =  [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def fn(a):
    return a%2 ==1 
newlist = filter(fn,a)
newlist = [i for i in newlist]
print(newlist)
#[1, 3, 5, 7, 9]

提示:

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表

用python删除文件和用linux命令删除文件方法

方法:os.remove("文件名")

代码:

python:os.remove(文件名)
linux:       rm  文件名

提示:注意权限问题

log日志中,我们需要用时间戳记录error,warning等的发生时间,请用datetime模块打印当前时间戳 “2018-04-01 11:38:54”

方法:datetime.strftime()方法对日期进行格式化

代码:

import datetime

a = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
print(a)
#2019-10-28 17:41:48

a=(1,)b=(1),c=("1") 分别是什么类型的数据?

方法:利用type方法可以打印出来数据类型

代码:

a=(1,)
b=(1)
c=("1")
print(type(a))
print(type(b))
print(type(c))

#<class 'tuple'>
#<class 'int'>
#<class 'str'>

请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行

pychart、matplotlib 、echart

[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]

方法:使用列表推导

代码:

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

字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳"

方法:用re.finaall匹配中文
代码:

import re
a= "not 404 found 张三 99 深圳"
ret =re.findall("[\u4e00-\u9fa5][\u4e00-\u9fa5]",a)
print(ret)
#['张三', '深圳']

正则re.complie作用

re.compile是将正则表达式编译成一个对象,加快速度,并重复使用

正则表达式匹配中,(.)和(.?)匹配区别?

(.*)是贪婪匹配,会把满足正则的尽可能多的往后匹配
(.*?)是非贪婪匹配,会把满足正则的尽可能少匹配

写一段自定义异常代码

方法:使用raise
代码:

def f1():
    try:
        for i in range(5):
            if i>2:
                raise Exception("大于2")
    except Exception as ret:
        print(ret)
f1()
#大于2

发表评论

电子邮件地址不会被公开。 必填项已用*标注