目录
概述
整理一些python常用并且基础的内容
1. 表达式(lambda)
2. 特殊函数(内置函数:map filter reduce zip list.sort sort)
表达式
1. lambda
lambda只是一个表达式,很多时候定义一个函数会过于麻烦,因此可以用lambda定义一个匿名函数
用法
lambda args:return 冒号前面是参数,可以有0个或者多喝,用逗号隔开;冒号右边是返回值
例子
lambda x,y : x+y
lambda x=1,y=2 : x+y
特殊函数
1、list.sort与sort
内建方法
list.sort(func=None, key=None, reverse=False(or True))
- 对于reverse这个bool类型参数,当reverse=False时:为正向排序;当reverse=True时:为反向排序。默认为False。
- 执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点
- 为了避免混乱,其会返回none
list = [2,8,4,6,9,1,3]
list.sort()
结果: [1,2,3,4,6,8,9]
内建函数sorted()
不会改变原有的list,而是会返回一个新的已经排好序的list
sort(list, reverse=False(or True))
list
=
[
2
,
8
,
4
,
1
,
5
,
7
,
3
]
other
=
sorted
(
list
)
自定义排序函数
#Python3想用cmp而不是key的话,需要from functools import cmp_to_key ,
#然后sort或者sorted的时候key=cmp_to_key(your_comparator)
#leetcode 179
from functools import cmp_to_key
class Solution:
def cmp(self,num1,num2):
str1 = str(num1)
str2 = str(num2)
if str1+str2 > str2+str1:
return -1
else:
return 1
def largestNumber(self, nums: List[int]) -> str:
num = sorted(nums,key = cmp_to_key(self.cmp))
if num[0] == 0: #对0的处理
return "0"
return ''.join(str(i) for i in num)
关于key
from operator import itemgetter, attrgetter student_tuples = [ ('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10), ]
sorted(student_tuples, key=lambda student: student[2]) #sort by age
#结果 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sorted(student_tuples, key=itemgetter(2)) #sort by age 也可以多层次排序,例如先按照成绩,在按照年龄
#结果 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sorted(student_objects, key=attrgetter('age')) #sort by age
#结果 [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
2. map
用法
map(function, sequence)
对sequence(列表/元祖/字符串)的item依次执行function(item),将执行结果组成list返回
例子
map(lambda x:x*x,range(10))
#结果[0,1,4,9,16,25,36,49,56]
3.filter
用法
filter(function, sequence)
对sequence的item依次执行function(item) 将执行结果为TRUE的item组成一个list/string/tuple(取决于sequence)
例子
filter(lambda x:x*x-4, range(10))
#结果: [0, 1, 3, 4, 5, 6, 7, 8, 9]
4. reduce
用法
reduce(function, sequence, starting_value)
对sequence的item顺序执行function,如果有start_value,可以作为初始值调用。function接收的参数个数只能为2,先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给function,然后只返回一个结果。返回值是数值
例子
reduce(lambda x,y:x*y-4,range(4))
#结果:-40
5.zip
例1
x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print xyz
结果是
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
例2
x = [1, 2, 3] y = [4, 5, 6, 7] xy = zip(x, y) print xy
结果是
[(1, 4), (2, 5), (3, 6)]
例3
x = [1, 2, 3] x = zip(x) print x
结果是
例4
[(1,), (2,), (3,)]
x = [1, 2, 3] y = [4, 5, 6] z = [7, 8, 9] xyz = zip(x, y, z) u = zip(*xyz) print u
结果是 (类似于unzip)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
6.translate
将字符串的一些值替换成另外的字符
#!/usr/bin/python
from string import maketrans # 引用 maketrans 函数。
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
str = "this is string example....wow!!!";
print str.translate(trantab); #3th3s 3s str3ng 2x1mpl2....w4w!!!