python常用操作(面试题)

本部分介绍一些日常常用的python小技巧,面试题中也可能会出现

1.map函数操作

在这里插入图片描述

2.生成随机整数,正态规律小数(-1–1),0-1小数

import random
import numpy as np

result = random.randint(10, 20)
res = np.random.randn(5)
ret = random.random()
/*
15
[-0.53466153  0.69176947  0.18377477  0.47902627  0.93834969]
0.6697961508083531
*/

3.python2和python3区别?列举5个

  • 1、Python3 使用 print 必须要以小括号包裹打印内容,比如 print(‘hi’)
    Python2 既可以使用带小括号的方式,也可以使用一个空格来分隔打印内容,比如 print ‘hi’
  • 2、python2 range(1,10)返回列表,python3中返回迭代器,节约内存
  • 3、python2中使用ascii编码,python中使用utf-8编码
  • 4、python2中unicode表示字符串序列,str表示字节序列
    python3中str表示字符串序列,byte表示字节序列
  • 5、python2中为正常显示中文,引入coding声明,python3中不需要
  • 6、python2中是raw_input()函数,python3中是input()函数

4.用lambda函数实现两个数相乘

sum = lambda a, b:a*b
print(sum(4, 6))

5.利用collections库的Counter方法统计字符串每个单词出现的次数.

from collections import Counter
a = "kjalfj;ldsjafl;hdsllfdhg;lahfbl;hl;ahlf;h"
res = Counter(a)
print(res)

6.filter方法求出列表所有奇数并构造新列表

  • filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def fn(a):
    return  a%2 == 1
new_list = filter(fn, a) #生成的是一个构造器对象,需要单个取出
new_list = [i for i in new_list]
print(new_list)

7.列表推导式求列表所有奇数并构造新列表(效果同6)

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

8.列表推导式展开二维数组

a = [[1, 2], [3, 4], [5, 6]]
x = [j for i in a for j in i] #方法一

import numpy as np
b = np.array(a).flatten().tolist() #方法二

9.举例说明zip()函数用法

  • zip()函数在运算时,会以一个或多个序列(可迭代对象)做为参数,返回一个元组的列表。同时将这些序列中并排的元素配对。
  • zip()参数可以接受任何类型的序列,同时也可以有两个以上的参数;当传入参数的长度不同时,zip能自动以最短序列长度为准进行截取,获得元组。
a = [1, 2]
b = [3, 4]
res = [i for i in zip(a, b)]
print(res)

a = (1, 2)
b = (3, 4)
res = [i for  i in zip(a, b)]
print(res)

a = "ab"
b = "xyz"
res = [i for i in zip(a, b)]
print(res)

'''
[(1, 3), (2, 4)]
[(1, 3), (2, 4)]
[('a', 'x'), ('b', 'y')]
'''

10.a="hello"和b="你好"编码成bytes类型

a = b"hello"
b = "哈哈".encode()

11.保留小数位数

a = 1.3333333

b = "%.03f"%a #保留三位小数
print(b)
c = round(a, 2) #保留两位小数
print(c)

12.列出几种魔法方法并简要介绍用途

  • init:对象初始化方法
  • new:创建对象时候执行的方法,单列模式会用到
  • str:当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
  • del:删除对象执行的方法

13.请将[i for i in range(3)]改成生成器

生成器是特殊的迭代器,

  • 1、列表表达式的【】改为()即可变成生成器
  • 2、函数在返回值得时候出现yield就变成生成器,而不是函数了;
    中括号换成小括号即可,有没有惊呆了
a = (i for i in range(3))
print(a)
<generator object <genexpr> at 0x000000C660EB65C8>

14.举例sort和sorted对列表排序

list = [0, -1, 3, -10, 5, 9]
list.sort(reverse=False)#在原list上进行修改,无返回值
print(list)

list = [0, -1, 3, -10, 5, 9]
res = sorted(list, reverse=False)#返回的是新的列表
print(list)
print(res)

[-10, -1, 0, 3, 5, 9]
[0, -1, 3, -10, 5, 9]
[-10, -1, 0, 3, 5, 9]

15.使用lambda函数从小到大排序(函数应用模板)

a = [-5, 8, 0, 4, 9, -4, -20, -2, 8, 2, -4]
a = sorted(a, key = lambda x:x)
print(a)

[-20, -5, -4, -4, -2, 0, 2, 4, 8, 8, 9]

16.使用lambda函数对list排序, 正数从小到大,负数从大到小

a = [-5, 8, 0, 4, 9, -4, -20, -2, 8, 2, -4]
a = sorted(a, key = lambda x:(x<0, abs(x)))
print(a)
[0, 2, 4, 8, 8, 9, -2, -4, -4, -5, -20]

17.列表嵌套字典的排序,分别根据年龄和姓名排序

foo = [{"name":"zs","age":19},{"name":"ll","age":54},
        {"name":"wa","age":17},{"name":"df","age":23}]
a = sorted(foo, key = lambda x:x["age"], reverse=False) #年龄从大到小排序
b = sorted(foo, key = lambda x:x["name"])#姓名从小到大排序

18.列表嵌套元组,分别按字母和数字排序

foo = [("zs", 19), ("ll", 54), ("wa", 17), ("sf", 23)]
a = sorted(foo, key=lambda  x:x[1], reverse=True) #按年龄从大到小
print(a)
b = sorted(foo, key = lambda x:x[0])#按姓名首字母从小到大
print(b)

[('ll', 54), ('sf', 23), ('zs', 19), ('wa', 17)]
[('ll', 54), ('sf', 23), ('wa', 17), ('zs', 19)]

19.列表嵌套列表排序,年龄数字相同怎么办?

foo = [["zs", 19], ["ll", 54], ["wa", 23], ["df", 23], ["xf", 23]]
a = sorted(foo, key = lambda x:(x[1], x[0]), reverse=False) #年龄相同时,添加参数按照字母排序
print(a)

[['zs', 19], ['df', 23], ['wa', 23], ['xf', 23], ['ll', 54]]

20.根据键对字典排序

dic = {"name":"zs", "sex":"man", "city":"bj"}
#方法一,zip函数
a1 = zip(dic.keys(), dic.values()) #字典转化为元组对象
print(a1) #<zip object at 0x000000433E943988>
a1 = [i for i in a1] #生成器取出元素
print(a1) #[('name', 'zs'), ('sex', 'man'), ('city', 'bj')]
b1 = sorted(a1, key = lambda x:x[0]) #依据元素的第一个元素进行排序,即根据键进行排序
print(b1) #[('city', 'bj'), ('name', 'zs'), ('sex', 'man')]
new_dic = {i[0]:i[1] for i in b1}#还原排序好的字典
print(new_dic) #{'city': 'bj', 'name': 'zs', 'sex': 'man'}

#方法二,不用zip
print(dic.items()) #字典转化为列表嵌套元组(不在原字典上进行操作)
b2 = sorted(dic.items(), key = lambda x:x[0])
new_dic = {i[0]:i[1] for i in b1}#还原排序好的字典
print(new_dic) #{'city': 'bj', 'name': 'zs', 'sex': 'man'}

21.根据字符串长度排序

s = ["ab", "abc", "a", "abcd"]
a = sorted(s, key = lambda x:len(x))
print(a)
s.sort(key=len) #在原列表上进行更改
print(s)

['a', 'ab', 'abc', 'abcd']
['a', 'ab', 'abc', 'abcd']

22.r、r+、rb、rb+文件打开模式区别在这里插入图片描述

23.生成0-100的随机数

import random

res1 = 100*random.random()
res2 = random.choice(range(0, 101))
res3 = random.randint(1, 100)
print(res1)
print(res2)
print(res3)

85.89465131590663
64
27

24.求两个列表的交集、差集、并集

a = [1, 2, 3, 4]
b = [3, 4, 5, 6]
#交集
j1 = [i for i in a if i in b]
j2 = list(set(a).intersection(set(b)))
#并集
b = list(set(a).union(set(b)))
#差集
c1 = list(set(b).difference(set(a))) #b中有而a中没有,反之转换a,b即可

猜你喜欢

转载自blog.csdn.net/hot7732788/article/details/88964114