Python:工作中常用的函数、方法(可作为python面试题)

Python:工作中常用的函数、方法(可作为python面试题)

1、python基础

  1. 对一个list,如何同时得到数据下标和该数据?
seq = ['one', 'two', 'three']
for i, element in enumerate(seq):
    pass
  1. 对于一个字典dict,如何同时得到键和值?
for key,value in  dict.items():
    pass
  1. random的常见用法
# 如何生成一个0-1(0<=n<1)之间的随机小数?
random.random()
# 如何生成一个1-10(1<=n<10)之间的随机整数?
random.randint(1,10)
# 如何生成随机选取0到100间的偶数?
random.randrange(0, 101, 2)
  1. 如何判断一个list中是否有某个元素?
seq = ['one', 'two', 'three']
if 'one' in seq:
    pass
if 'one' not in seq:
    pass
  1. list按照元素删除或者按照位置删除
seq = ['one', 'two', 'three']
# 如何按元素来删除元素‘two’?
seq.remove('two')  # 没有返回值但是会移除列表中的某个值的第一个匹配项
# 如何按位置来删除元素‘two’?
seq.pop(1)  # 删除单个或多个元素,按位删除(根据索引删除)
del seq[1]  # 根据索引(元素所在位置)来删除单个或多个元素
  1. 浅拷贝和深拷贝
# 浅拷贝
a = {1: [1,2,3]}
b = a.copy()
# 深拷贝
import copy
c = copy.deepcopy(a)
  1. 如何通过指定分隔符对字符串进行切片得到列表?
txt = "Google#Runoob#Taobao#Facebook"
x = txt.split("#")
  1. 如何删除字符串中的空字符或者说是字符序列?
# s为字符串,rm为要删除的字符序列
s.strip(rm) # 删除s字符串中开头、结尾处,位于 rm删除序列的字符
s.lstrip(rm) # 删除s字符串中开头处,位于 rm删除序列的字符
s.rstrip(rm) # 删除s字符串中结尾处,位于 rm删除序列的字符
a='   Hello World   '
a.strip()
  1. is和==是一样的么?
    1)is 比较两个对象的 id 值是否相等,是否指向同一个内存地址;
    2)== 比较的是两个对象的内容是否相等,值是否相等;
    3)小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用;
    4)is 运算符比 == 效率高,在变量和None进行比较时,应该使用 is
  2. 字符串和数字之间的转化?
int("100")
str(100)
  1. 如何获取一个变量的类型?以及如何判断一个变量是否是某一个已知类型?
# 获取变量的类型用type
# 一个参数实例
>>> type(1)
<type 'int'>
>>> type('runoob')
<type 'str'>
>>> type([2])
<type 'list'>
>>> type({0:'zero'})
<type 'dict'>
>>> x = 1          
>>> type( x ) == int  

# 判断是否是一个已知类型用instance
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True

# 注意:isinstance() 与 type() 区别:
# type() 不会认为子类是一种父类类型,不考虑继承关系。
# isinstance() 会认为子类是一种父类类型,考虑继承关系。
  1. python的函数是按引用调用还是按值调用?
    1)不可变对象(如字符串、数字或元组等)是按值调用的;
    2)可变对象(如列表等)是通过引用调用的;
  2. 如何删除一个list里面的重复元素,并用list得到结果?
L = ['d','a','f','d','b','c','d','b','c','a']
list(set(L))
  1. 如何创建一个文件夹?如何判断某个文件是否存在?如何删除一个文件?
os.makedirs(dir_path, exist_ok=True)
os.path.exists(file_path)
os.remove(file_path)
os.unlink(file_path)
  1. python中的异常处理是如何处理的?
try:
    # 需要执行的代码块(可能报错)
except Exception as e:
    # 如果代码报错,进行异常处理
    print(traceback.format_exc())
    print(e)
else:
    # 如果没有报错会执行的内容
finally:
    # 不管有没有报错,最终都会执行的内容

2、pandas相关

  1. 如何用函数func去处理dataframe中某一列(column_name)的每一个值?
df[column_name] = df[column_name].map(lambda x: func(x))
# 或者
df[column_name] = df[column_name].apply(func)
def func(x):
    pass
  1. 如何保留dataframe中某一列(column_name)中值等于指定值(constant_value)的所有数据
df = df[df[column_name] == constant_value]
  1. 如何删除dataframe中指定的某几列
df = df.drop(columns=[name1, name2, name3])
  1. 如何将dataframe按照name1列升序排列,按照name2列降序排列?
df = df.sort_values(by=[name1, name2], ascentding=[True, False])
  1. 如何将dataframe保存到路径path.csv中,且不保留索引?
df.to_csv(path.csv, index=False)
  1. 如何读取一个excel文件,且将第一列作为索引,并且跳过第一行?
data = pd.read_excel(excel_path, index_col=0, skiprows=1)
  1. 如何取dataframe中的某一个具体的值?
data = np.DataFrame(np.range(25), reshape(-1,5), index = ["A", "B", "C", "D", "E"], columns=list('qwert'))
print(data)
    q   w   e   r   t
A   0   1   2   3   4
B   5   6   7   8   9
C  10  11  12  13  14

# 用loc
print(data.loc[["A","C"],["w","r"]])
   w   r
A   1   3
C  11  13
# 用iloc
print(data.iloc[1:3,1:3])     
print(data.iloc[[1,3],1:5])
print(data.iloc[1,1])
    w   e
B   6   7
C  11  12

    w   e   r   t
B   6   7   8   9
D  16  17  18  19

6
  1. 如何获取dataframe的列名或者索引的列表形式的结果?
columns = df.columns.tolist()
indexs = df.index.tolist()
  1. 如何把dataframe中的某一列column_name设置为索引?
df = df.set_index([column_name])
  1. 如何把2个dataframe进行串联?
# 其中axis=0,合并的轴是行;1表示合并的轴是列
result = pd.concat([df1, df4], axis=1)

3、python中级及以上

  1. python中类的基本知识点。实例方法、静态方法、类方法的区别?如何初始化父类的函数?
    1)实例可以调用实例方法(因为实例传递了自己的地址给到了this指针);实例和类对象可以调用静态方法;实例和类对象可以调用类方法;
    2)super用来执行父类中的函数(因为super指向了父类的地址);也可以用来初始化父类的方法。
  2. python里面 的生成器(generator)有什么作用?
      generator和函数的执行流程不一样。变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
    生成器的作用:
    1)可以对大数据文件进行读取
# 方法一:直接使用 with open
with open("test.txt") as f:
    for line in f:
        #do something with data

# 方法二:使用yield构造一个生成器函数。每次读取4k大小的数据,将所有文件读取完
def readInChunks(fileObj, chunkSize=4096):
    """
    Lazy function to read a file piece by piece.
    Default chunk size: 4kB.
    """
    while 1:
        data = fileObj.read(chunkSize)
        if not data:
            break
        yield data

f = open('bigFile')
for chuck in readInChunks(f):
    #do_something(chunk)
f.close()
  1. 如果目前有一个函数可以处理一个文件,但是目前磁盘上有10万个文件,可以怎么办?
    1)可以使用多进程进行处理;
    2)python的多线程由于使用了global interpreter lock,仅有一个线程可以工作,因此python的多进程比较鸡肋,仅在io密集型的工作时适合使用,cpu计算密集型的时候则不适合,还是需要 使用多进程。
  2. python文件下面的__main__的作用是什么?
  3. 模块a要导入模块b,此时模块b也需要导入模块a,请问会报错么?如果报错的话,应该怎么解决?
  4. python里面的for循环的底层原理和实现?
    首先要明白什么是可迭代对象,什么是迭代器对象
    1)可迭代对象(iterable):很多python的数据类型都是可迭代对象:列表、字典、元组、字符串等
a = [1, 2, 3]
isinstance(a, Iterable) # True

2)迭代器对象(iterator):迭代器对象依赖 iter(args) 方法来实现,参数args必须是一个可迭代对象

a = [1, 2, 3]
b = iter(a)
isinstance(b, Iterator) # True
isinstance(b, Iterable) # True

然后就可以理解for循环的底层原理了
1)迭代器对象,实现了__next__()方法,可以不断调用该方法,返回迭代器对象的每个元素;
2)for循环的对象,必须是可迭代对象。而在底层,所有的可迭代对象均内置了__iter__()方法,返回值为迭代器对象
3)所以for循环本质上调用了可迭代对象的__iter__()方法,得到了该对象对应的迭代器对象,然后无限调用__next__()方法,得到对象中的每一个元素。直到StopIteration异常,代表迭代器中已无下一个元素,for循环自动处理该异常,跳出循环

# 1.获取可迭代对象的迭代器
# iterator = tuple01.__iter__()
iterator = dict01.__iter__()
while True:
    try:
        # 2.使用迭代器取所有的下一个元素并显示
        item = iterator.__next__()
        # print(item)
        print(item+":",dict01[item])
    # 3.遇到异常停止迭代
    except StopIteration:
        break
  1. 如果有一个同时交付的某一块代码里面,有4个for循环,你觉得合适么?不合适的话,应该怎么处理呢?
  2. python代码开发好了以后,除了交付代码,还需要交付其他什么文件么?
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值