1.输入一行字符,分别统计出其中英文字母,空格,数字,和其他字符的个数
s = '787r3huihiu uhiahfoihw oij3o24;/"\.;oihjo2i h34oihoi531'
alpha = 0
space = 0
digit = 0
other = 0
for i in s:
if i.isalpha():
alpha += 1
elif i.isspace():
space += 1
elif i.isdigit():
digit += 1
else:
other +=1
print(alpha, space, digit, other)
2. 关于变量赋值:交换a,b两个变量的值
a=1
b=2
a,b=b,a
print(a,b)
3.如果用多个变量接收列表或元组的值
a,*b=[1,2,3]
print(a,b)
4.输入一个字符串,返回倒序排列的结果;如,abcdef,返回fedcba
s='abcdef'
print(s[::-1])
5. 将"北京 上海 广州 深圳"转换为 “北京,上海,广州,深圳”
s="北京 上海 广州 深圳"
print(','.join(s.split(' ')))
6. 短路计算
print(3 and 2)
print(3 or 2)
# 应用
user = None
def foo():
user = "yuan"
return user or "root"
print(foo())
7. 零值概念
# Python中规定指定任何非0或非空(None)的值为True。
# 0,None为False。
# 所以在Python中,None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于Flase,其它值为True。
8.is和==的区别
l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(l1 == l2)
print(id(l1) == id(l2))
# is比较的是两对象的地址值;==比较的是两对象的值,调用的是对象的__eq__()方法
9. 将两个列表[1, 5, 7, 9],[2, 2, 6, 8]合并为[1, 2, 2, 5, 6, 7, 8, 9]
l1=[1,2,3,4,5]
l2=[6,7,8,9,10]
print(l1 + l2)
l1.extend(l2)
print(l1)
10. a = [1,2,3,4,5,6],a[::-3] 的结果是
a = [1,2,3,4,5,6]
print(a[::-3]) #[6,3]
11. 列表去重再排序
l = [1, 4, 5, 6, 6, 4, 2, 1]
l2 = list(set(l))
l2.sort()
print(l2)
12. s = ‘ajldjlajfdljfddd’,去重并从小到大排序输出’adfjl'
s = 'ajldjlajfdljfddd'
l=list(set(list(s)))
l.sort() # sort()方法将列表l排序,但是返回值为None
print(''.join(l))
13.列表和元组有什么不同?
不同点:
元组为只读列表;列表为可变列表;
元组可hash,可以作为字典的键;列表不可hash,不可以作字典的键;
相同点:
列表元组都可以存储不同数据类型的值;都可索引,可切片,可计数;
14.python中哪些是可变类型,哪些是不可变类型
可变类型:list,dict,set
不可变类型:int,folat,str,boolean,tuple,
15.解释下python的深浅拷贝
16.请合并下面两个字典 a = {“A”: 1, “B”: 2},b = {“C”: 3, “D”: 4}
a = {'A': 1, 'B': 2}
b = {'C': 3, 'D': 4}
a.update(b)
print(a)
17.python的三元运算表达
# 三元运算符(三目运算符)的表达式
# True_statements if expression else False_statements
x = 20
y = 30
ret = x if x > y else y
print(ret)
print("x是一个偶数" if x % 2 == 0 else "x是一个奇数")
18.统计一段字符串中每个字符出现的次数,比如abcaabccab
# 方式1
s = "abcaabccab"
# print(s.count("ab"))
dic = {}
for i in s:
dic[i] = dic.get(i, 0) + 1
print(dic)
# 方式2
s = "abcaabccab"
result = {x: s.count(x) for x in s}
print(result)
19.字典和列表的查找速度,哪个更快?
列表查询是遍历方式,时间复杂度是O(n), 字典查询是hash映射 时间复杂度是O(1);当数据量小的时候切片查询比map快,但是数据量大的时候字典的优势就体现出来了
20.如何实现[‘1’, ‘2’, ‘3’]变成[1, 2, 3]
# 方法一
l = ['1', '2', '3', '4']
ls=[]
for i in l:
ls.append(int(i))
print(ls)
# 方法二
# [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式] ]
print([int(i) for i in l]
21.获取1-100中所有偶数平方列表
print([i ** 2 for i in range(1, 101) if i % 2 == 0])
22.1,2,3,4,5能组成多少个无重复的元素?
# 方式1
li = [1, 2, 3, 4, 5]
new_li = []
for i in li:
for j in li:
for m in li:
if i != j and i != m and j != m:
num_str = str(i) + str(j) + str(m)
num = int(num_str)
new_li.append(num)
new_li.sort()
print(new_li)
# 方式2
ret = [int(str(i) + str(j) + str(k)) for k in li for j in li for i in li if i != j and i != k and j != k]
ret.sort()
print(len(ret))
print(ret)
23. 如何交换字典 {“A”:1,“B”:2}的键和值
# { 新键值对 for 迭代变量 in 可迭代对象 [if 条件表达式] }
d1 = {"A": 1, "B": 2}
print({v: k for k, v in d1.items()})
24.将所有的key值变为大写
print({k.upper():v for k,v in d.items()})
25.pass语句的作用是什么?
占位语句:不执行任务操作
26.如何在一个函数内部修改全局变量?
x = 10
def foo():
global x
x = 100
foo()
print(x)
27. 如何修改一个非局部非全局变量
def foo():
x = 10
def bar():
# print(count)
# count = 10
nonlocal x
x = x + 1
bar()
foo()
28.python的最大递归层数
import sys
print(sys.getrecursionlimit())
29.请解释*args,**kwargs的含义
*args 代表位置参数,它会接收任意多个参数并把这些参数作为元组传递给函数。
**kwargs 代表的关键字参数,允许你使用没有事先定义的参数名。
位置参数一定要放在关键字参数的前面。
作用:使用*args和**kwargs可以非常方便的定义函数,同时可以加强扩展性,以便日后的代码维护。
30.实现一个反转整数的函数,例如 -123 –> -321
def reverse_str(value):
if value > -10 and value < 10:
return value
if str(value)[0] == '-':
return int(str(value)[::-1])
else:
return -int(str(value)[::-1])
print(reverse_str(123))
31.python的函数传参是传值还是传址
def foo(x):
print(id(x))
x = 20
# x = []
# x.append(10)
print(id(x))
# a = []
a = 10
print(id(a))
foo(a)
32.对数值1.3425四舍五入保留2位小数点
# 常用的内置函数
bool
bin
oct
hex
sum
max
min
abs
pow
divmod
round
chr
ord
list
dict
set
len
any
all
zip
sorted #(最常考的)
print(round(1.3425, 2))
33.sortet排序:_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3},要求根据value值从大到小输出key
# 案例1
l = [1, 4, 6, 2, 8, 3]
print(sorted(l))
# 案例2
l2 = [("yuan", 22), ("rain", 33), ("alvin", 24)]
print(sorted(l2, key=lambda item: item[1]))
# 案例3
_dict = {'a': 1, 'b': 2, 'c': 3}
ret = sorted(_dict.items(), key=lambda x: x[1], reverse=True)
print([i[0] for i in ret])
34.如何把元组(“a”,“b”)和元组(1,2),变为字典{“a”:1,“b”:2}
a = ("a", "b")
b = (1, 2)
print(dict(zip(a, b))) # {'a': 1, 'b': 2}
35.一条语句把 L=[(1,2), (3,4)] 转换成 [(1,3),(2,4)],可以写下不同的方法
L = [(1, 2), (3, 4)]
print([j for i in L for j in i]) # [1, 2, 3, 4]
print([(j[1], j[0]) for j in L]) # [(2, 1), (4, 3)]
print(list(zip(L[0], L[1]))) # [(1, 3), (2, 4)]
36.合并所有二维列表元素到一个列表:l = [[1, 2], [3, 4], [5, 6]]
l = [[1, 2], [3, 4], [5, 6]]
print([k for i in l for k in i])
37.有个列表a = [1, 3, 5, 7, 0, -1, -9, -4, -5, 8] 使用filter 函数过滤出大于0的数
a = [1, 3, 5, 7, 0, -1, -9, 4, -5, 8]
print(list(filter(lambda x: x > 0, a)))
# 思考如果过滤大于0的奇数
print(list(filter(lambda x: x > 0 and x % 2 == 1, a)))
38.列表b = [“张三”, “张四”, “张五”, “王二”] 过滤掉姓张的姓名
print(list(filter(lambda i:i.startswith('张'), b)) ) # 过滤出张姓的同学
print(list(filter(lambda i: not i.startswith('张'), b)) ) # 过滤掉张姓的同学
39.过滤掉列表中不及格的学生
a = [
{"name": "张三", "score": 66},
{"name": "李四", "score": 88},
{"name": "王五", "score": 90},
{"name": "陈六", "score": 56},
]
print(list(filter(lambda i:i["score"]>=60 , a)))
40. 请将列表 [1,2,3,4,5] 使用map函数转变成 [1,4,9,16,25]
l = [1, 2, 3, 4, 5]
# 方案1
print([i * i for i in l])
# 方案2
def foo(item):
return item * item
print(list(map(foo, l)))
# 方案3
print(list(map(lambda x: x * x, l)))
41. map函数对列表a=[1,3,5],b=[2,4,6]相乘得到[2,12,30]
a = [1, 3, 5]
b = [2, 4, 6]
# 方案1:
print([i[0] * i[1] for i in zip(a, b)])
# 方案2:
print(list(map(lambda x, y: x * y, a, b)))
42. 将 ‘python is shell’ 转为 ‘nohtyp si llehs’
print(' '.join(list(i[::-1] for i in s.split(' '))))
print(' '.join(list(map(lambda i:i[::-1],s.split(' ')))))
43. 关于迭代器、生成器
44.range函数的用法
45.一行实现1-100的求和
print(sum(range(1,101)))
46.xrange和range的区别?
xrange在2版本就是3中range的作用,构建一个迭代器对象
47.如何快速读取5个G的文件的行数?
print(max(len(x.strip()) for x in open('apple.py','r')))
48. 关于生成器的面试题:
49.聊一聊你对闭包的理解
50.
51.请实现一个装饰器,限制该函数被调用的频率?
52.解释什么样的语言能够用装饰器?
53.从0-99这100个数中随机取出10个,要求不能重复,可以自己设计数据结构
54.如何随机打乱列表中的元素?
55.输入某年某月某日,判断这一天是这一年的第几天?
56.如何用python删除一个文件
57.正则匹配以163.com或qq邮箱
58.字符串a = “not 404 found 张三 99 深圳”,每个词中间是空格,用正则的方法,最终输出"张三 深圳"
59.正则中 .*?
的作用
60.序列化和反序列化
61.__str__
和__repr__
的区别
62.__dir__
的功能
63.__new__
、__init__
的作用
64.如何判断一个对象是否可调用
65.关于面向对象的变量查找
66.实现一个Singleton单例类, 要求遵循基本语言编程规范(用尽量多的方式)。