面试历来是一个老生常谈的话题,谈到面试自然离不开面经离不开刷题,无论是关于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']
很多小函数用熟了感觉真的是神器,麻雀虽小五脏俱全,对于这些常用的功能一定要熟练,熟练,熟练,而绝对不仅仅是掌握了解的程度就够了!