python面经总结之常见的问题与基本模块的常见使用方法

320 篇文章 88 订阅
151 篇文章 4 订阅

    面试历来是一个老生常谈的话题,谈到面试自然离不开面经离不开刷题,无论是关于python还是java还是其他的语言,在网上搜索的话会找到一大堆的面试准备材料,如何做好筛选,取其精华去其糟粕是很重要的一件事,毕竟谁都不会有大把的时间准备面试,甚至很多都是花了不到一个月的时间准备的面试就草草出发了,这个时间的确是有点短,在即将走到社会中去,找到一份满意的工作无疑是一件大事,今天不是要来说怎么去找工作或者说找工作的重要性的而是简单记录一下,自己在这个过程中积累下来 的一些内容吧,单纯的是针对于python的语言来说的,当然网上也有很多大佬,讲的更细致更明白,我在这里只是记录一下自己的准备材料,希望如果能帮到需要的人,就好比一个模块的使用说明就又几百页,但是真正在编程题目中常用的函数可能就只有十几个而已,我的能力还没办法面面俱到,在这里只是起到一个尽量全面详细的作用,记录最常用的功能和方法,这些东西的使用频率和技巧都是很重要的。

    下面看具体的内容:

#!usr/bin/env python  
#encoding:utf-8  
  
''' 
__Author__:沂水寒城 
功能:一些面试习题的练习和测试
''' 

import random
from functools import reduce
from operator import mul


def extendList(val, list=[]):
    '''
    实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列
    表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而
    不是它被调用的时候,list1 和 list3 是操作的相同的列表。而list2是操作的它创建的独立的列表(通过传递它自
    己的空列表作为list参数的值)
    '''
    list.append(val)
    return list


def squ(x):
    return x*x


#最Pythonic的代码
def some_test():
    '''
    '''
    num_list=[-2,-1,0,1,2,3,4,5]
    #交换首尾两个数字
    num_list[0],num_list[len(num_list)-1]=num_list[len(num_list)-1],num_list[0]
    #列表推导式,求列表中每个数的平方,这里也可以使用lambda函数来做
    new_list=[one*one for one in num_list]
    #new_list2=map(lambda x: x*x, [y for y in range(10)] )
    #print [lambda x:x+1 for x in num_list]
    print '所有元素的平方为:', map(lambda x: x*x, num_list)
    print '所有元素的平方为:', map(squ, num_list)
    print '所有元素的绝对值为:', map(lambda x:abs(x),num_list)
    print '所有为负数的元素为:', filter(lambda x:x < 0,num_list)
    print '所有元素的和为:', reduce(lambda x,y:x+y,num_list)


def print_mutiple():
    '''
    打印乘法表
    '''
    for i in range(1,10):
        one_line=''
        for j in range(1,i+1):
            one_line+='{0}*{1}={2}'.format(j,i,i*j)+' '
        print one_line+'\n'


def create_dict():
    '''
    创建字典,除了列举出来的还可以直接赋值创建、通过关键字dict和关键字参数创建等
    '''
    id_list=['20123456','20124567','20127890']
    name_list=['Mike','Jack','Tom']
    test_tuple=[('20123456','Mike'),('20124567','Jack'),('20127890','Tom')]
    one_dict=dict(zip(id_list,name_list))
    print 'zip方法创建的字典为:', one_dict
    print 'fromkeys方法创建的字典为:', dict.fromkeys(id_list)
    print '二元组列表创建的字典为:', dict(test_tuple)
    print '迭代器方式输出字典中的内容:'
    for i in one_dict.iteritems(): #迭代对象每次只能取出一个使用for循环遍历输出,数据量大的时候速度更快
        print i 
    print '----------------------------------------------------------------------------'
    for j in one_dict.items():  #迭代器,一次性取出字典中所有内容
        print j


def tuple2_list(one_tuple):
    '''
    元祖转化为列表
    '''
    return [i if not isinstance(i,tuple) else tuple2_list(i) for i in one_tuple]


def list_test():
    '''
    一些简单的列表操作:求和,最值、乘积、索引元素对输出、字符串化输出
    '''
    num_list=[-3,4,3,2,8] 
    num_list2=[4,5,6,7,8,9]
    one_tuple=('A','B','C','D','E')  
    total = sum(num_list)  #列表求和
    max_value = max(num_list) #列表求最大值
    min_value = min(num_list) #列表求最小值l
    multiple = reduce(mul, num_list, 1) #默认值传1以防空列表报错
    print '最大值为:', max_value
    print '最小值为:', min_value
    print '总和为:', total 
    print '乘积为:', multiple
    print '输出列表中元素下标和元素值为:'
    for index, ele in enumerate(num_list):
        print '下标{0}处的元素为:{1}'.format(index, ele)
    print '将列表中元素拼接输出:', ''.join([str(x) for x in num_list])
    print '列表转化为元组形式为:', tuple(num_list)
    print '元祖转化为列表形式为:', tuple2_list(one_tuple)
    print 'num_list和num_list2的交集为:', [one for one in num_list if one in num_list2]
    print 'num_list和num_list2的差集为:', [one for one in num_list if one not in num_list2]
    print 'num_list和num_list2的并集为:', num_list+num_list2


def simple_num():
    '''
    简单的赋值
    '''
    one=9
    two=90 if one>10 else 19
    print 'two is:', two


def random_test():
    '''
    简单常用的random模块函数使用
    '''
    num_list=[3,5,6,9,0,1,2,7,18,21,34,67,91]
    print '输出一个指定范围1--1000的随机整数:', random.randint(1,1000)
    print '输出一个随机的浮点数0-1之间: ', random.random()
    print '输出一个指定上下界的随机的浮点数为:', random.uniform(12,20)
    print '输出num_list中一个随机数: ', random.choice(num_list)
    print '输出对num_list列表随机采样n位的结果为:', random.sample(num_list, 5)
    random.shuffle(num_list)
    print '输出打乱顺序后的列表为:', num_list


def str_test():
    '''
    关于字符串的一些简单方法使用
    '''
    one_str='abdefEFdf12895sdsAd '
    one_str=one_str.strip()
    print '转化为大写:', one_str.upper()
    print '转化为小写:', one_str.lower()
    print '检查字符串是否由字母字符组成:', one_str.isalnum()
    print '检查字符串是否由字母字符组成:', one_str.isalpha()
    print '检查字符串是否由数字字符组成:', one_str.isdigit()
    print '替换字符a:', one_str.replace('a', 'Z')
    print '分割字符串:', one_str.split('E')


def set_test():
    '''
    set的一些简单使用方法举例
    '''
    one_str='abgkGJdir234jd'
    two_str='djkg89034jmhjG'
    one_set=set(one_str)
    two_set=set(two_str)
    print 'one_str转化为集合为:', one_set
    print 'two_str转化为集合为:', two_set
    #单纯在,交、并、差的运算上以及去重的操作上set的确是由于list的操作的
    print 'one_set和two_set交集为:', one_set & two_set
    print 'one_set和two_set并集为:', one_set | two_set
    print 'one_set和two_set差集为:', one_set - two_set
    print 'one_set和two_set对称差集为:', one_set ^ two_set


if __name__ == '__main__':
    #extendList测试
    list1 = extendList(10)
    list2 = extendList(123,[])
    list3 = extendList('a')
    print "list1 = %s" % list1
    print "list2 = %s" % list2
    print "list3 = %s" % list3

    #some_test测试
    some_test()

    #打印乘法表
    print_mutiple()

    #创建字典测试
    create_dict()

    #列表的简单测试
    list_test()

    #简单的赋值
    simple_num()

    #random模块的简单使用
    random_test()

    #字符串处理的一些常用方法
    str_test()


结果如下:


list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']
所有元素的平方为: [25, 1, 0, 1, 4, 9, 16, 4]
所有元素的平方为: [25, 1, 0, 1, 4, 9, 16, 4]
所有元素的绝对值为: [5, 1, 0, 1, 2, 3, 4, 2]
所有为负数的元素为: [-1, -2]
所有元素的和为: 12
1*1=1 

1*2=2 2*2=4 

1*3=3 2*3=6 3*3=9 

1*4=4 2*4=8 3*4=12 4*4=16 

1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 

1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 

1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 

1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 

1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 

zip方法创建的字典为: {'20124567': 'Jack', '20127890': 'Tom', '20123456': 'Mike'}
fromkeys方法创建的字典为: {'20124567': None, '20127890': None, '20123456': None}
二元组列表创建的字典为: {'20124567': 'Jack', '20127890': 'Tom', '20123456': 'Mike'}
迭代器方式输出字典中的内容:
('20124567', 'Jack')
('20127890', 'Tom')
('20123456', 'Mike')
----------------------------------------------------------------------------
('20124567', 'Jack')
('20127890', 'Tom')
('20123456', 'Mike')
最大值为: 8
最小值为: -3
总和为: 14
乘积为: -576
输出列表中元素下标和元素值为:
下标0处的元素为:-3
下标1处的元素为:4
下标2处的元素为:3
下标3处的元素为:2
下标4处的元素为:8
将列表中元素拼接输出: -34328
列表转化为元组形式为: (-3, 4, 3, 2, 8)
元祖转化为列表形式为: ['A', 'B', 'C', 'D', 'E']
num_list和num_list2的交集为: [4, 8]
num_list和num_list2的差集为: [-3, 3, 2]
num_list和num_list2的并集为: [-3, 4, 3, 2, 8, 4, 5, 6, 7, 8, 9]
two is: 19
输出一个指定范围1--1000的随机整数: 995
输出一个随机的浮点数0-1之间:  0.494703671633
输出一个指定上下界的随机的浮点数为: 13.6398110718
输出num_list中一个随机数:  1
输出对num_list列表随机采样n位的结果为: [6, 34, 0, 7, 91]
输出打乱顺序后的列表为: [91, 18, 2, 5, 1, 67, 21, 3, 7, 34, 6, 9, 0]
转化为大写: ABDEFEFDF12895SDSAD
转化为小写: abdefefdf12895sdsad
检查字符串是否由字母字符组成: True
检查字符串是否由字母字符组成: False
检查字符串是否由数字字符组成: False
替换字符a: ZbdefEFdf12895sdsAd
分割字符串: ['abdef', 'Fdf12895sdsAd']

    很多小函数用熟了感觉真的是神器,麻雀虽小五脏俱全,对于这些常用的功能一定要熟练,熟练,熟练,而绝对不仅仅是掌握了解的程度就够了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值