python--数据处理之特殊函数及表达式(一)

目录

概述

表达式

1. lambda

2. map

 3.filter

 4. reduce

5.zip

6.translate


概述

整理一些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!!!
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

晏九

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

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

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

打赏作者

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

抵扣说明:

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

余额充值