python学习:函数---内置函数(filter、map、sort)

一、filter

filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素。

需要注意,在python3中返回的是一个可迭代对象,但是在python2中返回的是一个新的列表 。

# 过滤出列表中的所有奇数
def is_odd(x):
    return x % 2 == 1

ret = filter(is_odd,[1, 4, 6, 7, 9, 12, 17])
print(list(ret)) # [1, 7, 9, 17]

# 过滤出1-100中平方根是整数的数
from math import sqrt
def sqr(x):
    return sqrt(x) % 1 == 0

ret = filter(sqr,range(1,101))
print(list(ret))

二、map

# 计算平方数
def square(x):
    return x ** 2

ret = map(square, [1, 2, 3, 4, 5])  # 计算列表各个元素的平方
print(list(ret)) # [1, 4, 9, 16, 25]

ret = map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函数
print(list(ret)) # [1, 4, 9, 16, 25]

# 提供了两个列表,对相同位置的列表数据进行相加
ret = map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8])
print(list(ret)) #[3, 7, 11, 15, 19]

三、sorted

语法:
    sorted(iterable, key=None, reverse=False)
参数说明:
    iterable -- 可迭代对象。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值:
    返回重新排序的列表。
l = [30,6,-10,88,-20,22]

# 默认排序
ret = sorted(l)
print(l)    # 原始列表        [30, 6, -10, 88, -20, 22]
print(ret)  # 排序后的新列表  [-20, -10, 6, 22, 30, 88]

# 指定key排序
ret = sorted(l,key=abs)  # 根据绝对值大小排序
print(l)    # 原始列表        [30, 6, -10, 88, -20, 22]
print(ret)  # 排序后的新列表  [6, -10, -20, 22, 30, 88]

# 指定排序规则
ret = sorted(l,key=abs,reverse= True)
print(l)    # 原始列表        [30, 6, -10, 88, -20, 22]
print(ret)  # 排序后的新列表  [88, 30, 22, -20, -10, 6]

# 字典也可以排序,只不过字典排序只排key
dic ={3: 'D', 2: 'B', 5: 'B', 4: 'E', 1: 'A'}
ret = sorted(dic)
print(ret)  # [1, 2, 3, 4, 5]

ret1 = sorted(l, key=lambda x: x*-1)
ret2 = sorted(l,reverse= True)
print(ret1)   # [88, 30, 22, 6, -10, -20]
print(ret2)   # [88, 30, 22, 6, -10, -20]

之前学过一个sort方法,这个sort方法不是一个内置函数,它只是列表的一个方法,只有在使用列表的时候才可以使用,但是sorted内置函数对所有可迭代对象都可以使用。

列表的sort方法是在原列表上排序,不会创建一个新列表。sorted内置函数是创建了一个新的列表来存储返回结果。

l = [30,6,-10,88,-20,22]

# 默认排序
ret = sorted(l)
print(l)    # 原始列表        [30, 6, -10, 88, -20, 22]
print(ret)  # 排序后的新列表  [-20, -10, 6, 22, 30, 88]

ret = l.sort()
print(l)    # [-20, -10, 6, 22, 30, 88]
print(ret)  # None

l.sort(key=abs)
print(l)    # [6, -10, -20, 22, 30, 88]
l.sort(reverse=True)
print(l)    # [88, 30, 22, 6, -10, -20]
l.sort(key=abs,reverse=True)
print(l)    # [88, 30, 22, -20, -10, 6]

四、reversed

# 字符串
seqString = 'Runoob'
print(list(reversed(seqString)))  # ['b', 'o', 'o', 'n', 'u', 'R']

# 元组
seqTuple = ('R', 'u', 'n', 'o', 'o', 'b')  # ['b', 'o', 'o', 'n', 'u', 'R']
print(list(reversed(seqTuple)))

# range
seqRange = range(5, 9)  # [8, 7, 6, 5]
print(list(reversed(seqRange)))

# 列表
seqList = [1, 2, 4, 3, 5]
print(list(reversed(seqList)))  # [5, 3, 4, 2, 1]

五、

原文地址:https://www.cnblogs.com/Ryan-Fei/p/12202650.html